我想使用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
。为什么呢?
答案 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);