1

我的游戏中的碰撞问题:对于某些实体,它与在联系侦听器中注册不一致。具体来说,我的子弹和导弹经常直接穿过其他实体/生物,操作​​词经常,就像有时他们那样,我无法确定这种不一致的原因。我已经将它们都设置为“子弹”以进行连续碰撞,并且它们的行进速度不会令人讨厌,所以我没有想法。

这是一个演示该问题的视频:

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) {
}

}

4

1 回答 1

2

我相信您还需要检查夹具 B 是子弹还是导弹​​。来自http://www.iforce2d.net/b2dtut/collision-anatomy

A 和 B 夹具没有特定的顺序,因此您通常需要在夹具或其主体中设置用户数据,以便您可以判断夹具属于哪个对象。从这些固定装置中,您可以 GetBody() 找到碰撞的物体。

于 2013-08-16T22:11:52.027 回答