私は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);
おかげ
身体が接触を失っていることは確かですか? Box2dDebugRendererを使用してチェックします。 –
はい、TouchPadの座標の助けを借りて1つのボディ(ダイナミック)を動かしているため、ボディが別のボディ(静的)を通過するときにendContact()が毎回呼び出されることはありません。 –
十分に公正です。私がデバッグレンダラを使うことを提案したのは、ボディにマッチするかもしれないし、マッチしないかもしれない何かを描画するのではなく、ボディ自身を描画するということです。また、コールバック内でsetEnabled(true)を呼び出す理由がありますか? –