0

私はjavascriptとbox2dにかなり慣れていません.2つのオブジェクトが衝突したときにカスタム関数を呼び出す方法を誰かが知っているかどうか疑問に思っていました. 成功せずに を使用するいくつかの例を使用してみましたb2ContactListener。オブジェクトを別のオブジェクトの上に配置し、標準の Box2d 物理演算に任せました。

2 つのコンソール出力を受け取ります。1 つ目は次のコードでnull、2 つ目はBall次のコードです。

var listener = new Box2D.Dynamics.b2ContactListener;
listener.BeginContact = function(contact) {
    console.log(contact.GetFixtureA().GetBody().GetUserData()); 
    console.log(contact.GetFixtureB().GetBody().GetUserData());
};. 

衝突する必要がある 2 つのオブジェクトは、b2_dynamicbody(ボール) とb2PolygonShapeです。(矩形)。bodyDef.userData = "Ball";Ball.js と Mouse.js で使用して、それらbodyDef.userData = "Mouse";がヒットしたかどうかを識別しようとします。代わりに、ボールのみが表示されます。

次に、これは衝突を検出するための正しい方法ではないと確信しています:PI 十分に説明したことを願っています。誰かが私を正しい方向に導くことができますか?

4

1 に答える 1

0

どうやら、box2dで作成した世界にカスタムイベントを追加する必要がありました。そのため、この問題は、次の場所にある box2d ドキュメント/マニュアルの大きな塊を読むことで解決されました。

UserData()衝突する可能性があり、衝突するだけでなく何か他のことをしなければならないすべてのオブジェクトについて、文字列を追加することから始めました。次のコードを使用します。

bodyDef.userData = "Car";

注: すべてのオブジェクトには、独自の一意の文字列が必要です。

次に、新しいコンタクト リスナー (上記の質問で定式化) を作成し、フィクスチャが互いに衝突するのをリッスンしました。その場合、フィクスチャを変数に「保存」UserData()します。これを使用して、どのオブジェクトが互いに衝突するかを調べることができます。

var contactListener = new Box2D.Dynamics.b2ContactListener;
contactListener.BeginContact = function(contact) {

    var fixA = contact.GetFixtureA().GetBody().GetUserData();
    var fixB = contact.GetFixtureB().GetBody().GetUserData();

    // if else statement here...

};

world.SetContactListener(contactListener);

最後に、イベントをワールドに追加する最後のステートメントworld.SetContactListener(contactListener);を追加して、イベントが衝突をリッスンできるようにしました。これを追加するのを忘れていたため、私の問題でした。

誰かがこれが役に立つことを願っています!

于 2014-04-22T10:23:32.713 に答える