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 に答える