Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
libgdx-box2D-contactlistener_Libgdx_Box2d - Fatal编程技术网

libgdx-box2D-contactlistener

libgdx-box2D-contactlistener,libgdx,box2d,Libgdx,Box2d,我正在使用contactListener测试box2D中两个实体之间的碰撞 这是我使用world.setContactListenernew-Box2DWorldthis添加的整个contactListener类 public class Box2DWorld implements ContactListener{ World world; GameScreen gameScreen; Car car; public enum BodyName{ frontWheel,rearWh

我正在使用contactListener测试box2D中两个实体之间的碰撞

这是我使用world.setContactListenernew-Box2DWorldthis添加的整个contactListener类

 public class Box2DWorld implements ContactListener{

World world;
GameScreen gameScreen;
Car car;

public enum BodyName{
    frontWheel,rearWheel,carShell,ground,finishSensor
}

/**
 * this class handles collisions and body userdata
 * @param gameScreen
 */
public Box2DWorld(GameScreen gameScreen) {  
    this.gameScreen = gameScreen;
    world = gameScreen.world;
    this.car = gameScreen.car;
}


/*
 * the debug should be like 
 * 
 * BEGONCONTACT,preSolve,postSolve,......postsolve,ENDCONTACT,BEGINCONTACT,preSolve,postSolve
 * 
 * but i am getting debug like
 * 
 * BEGINCONTACT,preSolve,postSolve,......postsolve,BEGINCONTACT,presolve,ENDCONTACT,preSolve,postSolve...
 * 
 * i can't understand why begincontact appears twice without endcontact in between and also bodies are in contact
 *  even after endcontact
 * 
 */

@Override
public void beginContact(Contact contact) {
    BodyName bodyA = (BodyName) contact.getFixtureA().getBody().getUserData();
    BodyName bodyB = (BodyName) contact.getFixtureB().getBody().getUserData();


    if((bodyA == BodyName.frontWheel && bodyB == BodyName.ground )||(bodyA == BodyName.ground && bodyB == BodyName.frontWheel)){
        car.frontWheel.onGround = true;
        System.out.println("begin contact");
    }


}   

@Override
public void endContact(Contact contact) {
    BodyName bodyA = (BodyName) contact.getFixtureA().getBody().getUserData();
    BodyName bodyB = (BodyName) contact.getFixtureB().getBody().getUserData();

    if((bodyA == BodyName.frontWheel && bodyB == BodyName.ground )||(bodyA == BodyName.ground && bodyB == BodyName.frontWheel)){
        car.frontWheel.onGround = false;
        System.out.println("contact end");  
    }

}

@Override
public void preSolve(Contact contact, Manifold oldManifold) {

    BodyName bodyA = (BodyName) contact.getFixtureA().getBody().getUserData();
    BodyName bodyB = (BodyName) contact.getFixtureB().getBody().getUserData();

    if((bodyA == BodyName.frontWheel && bodyB == BodyName.ground )||(bodyA == BodyName.ground && bodyB == BodyName.frontWheel)){
        System.out.println("PreSolve"); 
    }


}

@Override
public void postSolve(Contact contact, ContactImpulse impulse) {

    BodyName bodyA = (BodyName) contact.getFixtureA().getBody().getUserData();
    BodyName bodyB = (BodyName) contact.getFixtureB().getBody().getUserData();

    if((bodyA == BodyName.frontWheel && bodyB == BodyName.ground )||(bodyA == BodyName.ground && bodyB == BodyName.frontWheel)){
        System.out.println("postSolve");    
    }

}
我的任务是这样的

开始接触 预溶 后解 . . . . . . 预溶 后解 开始接触 预溶 末端接触 后解 预溶 . . .

我不明白为什么begincontact出现在endcontact之前

地面车身和前轮车身各只有一个固定装置


我一个星期都搞不懂,请帮我记住,接触是在两个固定装置之间,而不是两个身体之间

我猜你的场地是由很多固定装置组成的,它们都在同一个场地上,对吗?当轮子在夹具上滚动时,它一次可以接触多个夹具,因此可以按顺序获得BeginTexture1、BeginTexture2和endfixture1。这很正常。我想如果你打印出每个接触事件中涉及的地面装置,你就会明白我的意思


如果您想知道车轮何时接触地面,则需要跟踪当前接触的固定装置总数。可以通过在获得“开始”事件时递增计数器,在获得“结束”事件时递减计数器来实现。然后,你可以随时检查柜台,如果它是超过零,车轮接触地面。< / P>你没有检查的情况下,BOYDA==Y和BODYB= =席西AM检查,我只是没有;don’不要在这里加上它,那么你就加上它吧,这样人们就不会浪费他们和你的时间,为你已经做过的事情提供建议。我想这里一定还有你没有添加的东西,因为如果一对尸体在最终接触发生之前发生了两次初始接触事件,那将是Box2D中的一个巨大错误。我真的很抱歉我没有添加,我没有提问的经验,请原谅我。我非常喜欢你的博客,你给了我很大的帮助,也帮了我很多忙people@iforce2d我现在编辑了我的问题,我不知道是否应该添加更多。如果我缺少任何东西,请告诉我。我将其更改为单个夹具,但问题仍然存在,具体取决于它的形状类型,实际导出的夹具可能不相同。例如,Box2D最多只能使用8个顶点的凸多边形,因此,当您导出一个大型多边形或一个具有凹面部分的多边形时,RUBE将创建Box2D可以使用的单个多边形。正如我提到的,你所看到的并不是真正的问题,而是预期的行为。你有没有试着打印出每个接触事件都是由哪些装置引起的?哇,很好,修复了它,就像你说的,这些开始接触来自不同的装置。不知道box2D只能有8个顶点。感谢您的帮助: