我的游戏中的碰撞问题:对于某些实体,它与在联系人监听器中注册不一致。具体来说,我的子弹和导弹经常穿过其他实体/怪物,操作词往往是,有时他们这样做,我无法确定造成这种不一致的原因。我已将它们都设置为“子弹”以进行连续碰撞,并且它们不会令人讨厌地快速行进,所以我没有想法。
以下是展示此问题的视频:
http://www.youtube.com/watch?v=FMLkg5r3dpo
这是我的联系人听众:
public class Collisions implements ContactListener {
public Collisions() {
}
@Override
public void beginContact(Contact contact) {
Body a = contact.getFixtureA().getBody();
Body b = contact.getFixtureB().getBody();
if (a.getUserData() instanceof Bullet && b.getUserData() instanceof Enemy) {
Bullet bullet = (Bullet) a.getUserData();
Enemy enemy = (Enemy) b.getUserData();
enemy.harm(10);
bullet.kill();
}
if (a.getUserData() instanceof Missile && b.getUserData() instanceof Enemy) {
Missile missile = (Missile) a.getUserData();
Enemy enemy = (Enemy) b.getUserData();
enemy.harm(40);
missile.kill();
}
if (a.getUserData() instanceof Craft && b.getUserData() instanceof Enemy) {
Craft craft = (Craft) a.getUserData();
Enemy enemy = (Enemy) b.getUserData();
craft.harm(5);
enemy.harm(10);
}
}
@Override
public void endContact(Contact contact) {
}
@Override
public void preSolve(Contact contact, Manifold oldManifold) {
}
@Override
public void postSolve(Contact contact, ContactImpulse impulse) {
}
}
答案 0 :(得分:2)
我相信你还需要检查夹具B是子弹还是导弹。 来自http://www.iforce2d.net/b2dtut/collision-anatomy
A和B灯具没有特定的顺序,因此您经常需要在灯具或其主体中设置用户数据,以便您可以知道灯具所属的对象。从这些灯具中,你可以通过GetBody()找到碰撞的物体。