Java Box2D碰撞获胜';Don’别给我自己的听众打电话

Java Box2D碰撞获胜';Don’别给我自己的听众打电话,java,libgdx,box2d,Java,Libgdx,Box2d,我想使用Box2Ds碰撞检测来检查播放器是否与某物碰撞。因此,我创建了一个类并实现了类CollisionListener,这样我就可以使用方法beginContact()来检查播放器是否与某些东西发生碰撞。现在我只想在控制台中打印这个方法是否有效。事实并非如此。这是我的密码: 我制作了一个类MyCollisionListener,它实现了CollisionListener,如下所示: 在类播放中: // ... private World world; private ContactListen

我想使用Box2Ds碰撞检测来检查播放器是否与某物碰撞。因此,我创建了一个类并实现了类
CollisionListener
,这样我就可以使用方法
beginContact()
来检查播放器是否与某些东西发生碰撞。现在我只想在控制台中打印这个方法是否有效。事实并非如此。这是我的密码:

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

在类
播放中

// ...
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不会在
MyCollisionListener
中调用方法
beginContact
。为什么?

如果您的代码没有缺少一些步骤,由于为了示例而缩短,您将以联系人侦听器的身份传递
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);

你凭什么认为有联系人?你有动感的身体吗?他们有固定装置吗?你使用掩蔽吗?调试器提示你有联系人吗?当然!我甚至试图通过在另一个类中设置侦听器来实现这个自定义联系人侦听器。setContactListener(新的ContactListener{把代码放在这里});这就成功了!我没有遇到碰撞之类的问题。我的问题是,我实现联系人侦听器的类不会调用它的方法。如果您实际使用的是“MyContactListener”类而不是“ContactListener”超类,这会有所帮助。@iforce2d这没有什么区别@Pixell您的示例只是一个示例,缺少
contactListener=new myContactListener()
,并且您没有传入未初始化的contactListener,对吗?在Contact类的更新函数中,您可以看到beginContact从何处调用。在那里放一个断点,看看它能做什么。非常感谢!contactlistener=new MyContactListener();解决了这个问题!我已经有一段时间没有在自己的类中实现类了,完全忘记了那行代码D这就是我要找的。谢谢