2013-04-05 16 views
6

私はbox2dで新しくLibGDXゲームで実装しようとしています。私がしたいのは、さまざまな体の衝突を検出することです。そこで、私はクラスcollisionDetectionを作成してContactListenerを実装しました。これは4つのオーバーライドされたメソッド、すなわちbeginContact()endContact()を処理する必要があります。また、collisionDetectionクラスのオブジェクトをworld.setcontactListner(collisionDet)に渡しています。これによって、ワールドクラスのボディが互いに衝突したときに、collisionDetectionクラスのオーバーライドされたメソッドが呼び出されます。しかし体がぶつかったときに問題が起きているのですが、いつもendContact()メソッドが呼ばれていませんが、ボディが接触を失ったときに呼び出されるわけではありません。毎回endContact()を検出する方法は何でしょうか。ContactListner(Box2d)のEndContactが毎回LibGDXで呼び出されない

衝突判定クラスのコードは以下の通りです:

public class CollisionDetection implements ContactListener { 
static Fixture fixtureA; 
static Fixture fixtureB; 
public static boolean Colliding=false; 
World world; 


protected CollisionDetection(World world, long addr) { 
    this.world = world; 
    // TODO Auto-generated constructor stub 
} 

@Override 
public void beginContact(Contact contact) { 
    // TODO Auto-generated method stub 
    fixtureA = contact.getFixtureA(); 
    fixtureB = contact.getFixtureB(); 

    Colliding=true; 

} 

@Override 
public void endContact(Contact contact) { 
    // TODO Auto-generated method stub  
    Colliding=false; 

} 

@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 


} 

そしてワールドクラス

collisionDet = new CollisionDetection(worldbox, 0);
worldbox.setContactListener(collisionDet);

おかげ

+0

身体が接触を失っていることは確かですか? Box2dDebugRendererを使用してチェックします。 –

+0

はい、TouchPadの座標の助けを借りて1つのボディ(ダイナミック)を動かしているため、ボディが別のボディ(静的)を通過するときにendContact()が毎回呼び出されることはありません。 –

+0

十分に公正です。私がデバッグレンダラを使うことを提案したのは、ボディにマッチするかもしれないし、マッチしないかもしれない何かを描画するのではなく、ボディ自身を描画するということです。また、コールバック内でsetEnabled(true)を呼び出す理由がありますか? –

答えて

0

あなたがオブジェクトを移動するためのsetTranformを()使用している場合があります。.. Box2dは、set transformを使用するとコールバックを与えません

+0

いいえ私はそれらを移動するためにbody.setLinearVelocity()を使用しています。 –

+1

System.out.println( "endcontacr")を使用してコードをデバッグしましたか? in endContact私はあなたがブーリアン変数Collidingを静的に取っていることがわかり、contactとendcontactの両方のコールバックを与えているかもしれませんが、box2dの同じステップサイクルにある可能性があります。 system.out.printlnを使ってデバッグしよう –

関連する問題