8

box2dwebを使用しています。私はゲームを開発しようとしています。ある時点で、「Circle」と「Box」の間の接点を見つける必要があります。私が知っているのは、b2ContactListenerを使用して実行できることだけです。Post-Solve Eventを使用してb2ContactListenerを実装することにより、連絡先データを受け取ることができます。助けてください!

4

1 に答える 1

16

あなたは正しい方向に進んでいます。b2ContactListenerでフックできるさまざまなイベントがあります。

var b2Listener = Box2D.Dynamics.b2ContactListener;

//Add listeners for contact
var listener = new b2Listener;

listener.BeginContact = function(contact) {
    //console.log(contact.GetFixtureA().GetBody().GetUserData());
}

listener.EndContact = function(contact) {
    // console.log(contact.GetFixtureA().GetBody().GetUserData());
}

listener.PostSolve = function(contact, impulse) {
    if (contact.GetFixtureA().GetBody().GetUserData() == 'ball' || contact.GetFixtureB().GetBody().GetUserData() == 'ball') {
        var impulse = impulse.normalImpulses[0];
        if (impulse < 0.2) return; //threshold ignore small impacts
        world.ball.impulse = impulse > 0.6 ? 0.5 : impulse;
        console.log(world.ball.impulse);
    }
}

listener.PreSolve = function(contact, oldManifold) {
    // PreSolve
}

this.world.SetContactListener(listener);

postSolveコードを削除し、必要に応じて適切なイベントにフックするだけです。

Seth laddのブログには、衝突/反応に関するすばらしい記事がいくつかあります。これは私がこれらのビットを拾ったところですので、完全な信用は彼に行きます。

これがお役に立てば幸いです。

ありがとう、ゲイリー

于 2012-06-08T23:40:31.467 に答える