Box2D碰撞不会调用我自己的CollisionListener

时间:2014-10-29 22:05:15

标签: java libgdx box2d

我想使用Box2Ds碰撞检测来检查玩家是否与某些东西发生碰撞。所以我创建了一个类并实现了类CollisionListener,因此我可以使用方法beginContact()来检查玩家是否与某些东西发生碰撞。现在我只想在控制台中打印,如果这种方法确实有效。它不是。这是我的代码:

我创建了一个类MyCollisionListener,它实现了CollisionListener,如下所示:

在班级Play中:

// ...
private World world;
private ContactListener contactlistener;

public Play(GameStateManager gsm) {
    super(gsm);

    world = new World(new Vector2(0, -1), true);
    world.setContactListener(contactlistener);
// ...

我的班级MyContactListener

public class MyContactListener implements ContactListener {

    public MyContactListener() {}

    @Override
    public void beginContact(Contact contact) {
        System.out.println("Contact!");
    }

    @Override
    public void endContact(Contact contact) {
        // TODO Auto-generated method stub
    }


    @Override
    public void preSolve(Contact contact, Manifold oldManifold) {
        // TODO Auto-generated method stub
    }


    @Override
    public void postSolve(Contact contact, ContactImpulse impulse) {
        // TODO Auto-generated method stub
    }
}

由于某种原因,collison不会调用beginContact中的方法MyCollisionListener。为什么呢?

1 个答案:

答案 0 :(得分:2)

Iff你的代码并不缺少一些步骤,由于例子的缩短,你将null作为联系人监听器传递:

private World world;
private ContactListener contactlistener;

public Play(GameStateManager gsm) {
    super(gsm);
    world = new World(new Vector2(0, -1), true);
    contactlistener = new MyContactListener(); // XXX
    world.setContactListener(contactlistener);