我使用box2dweb。我正在尝试开发游戏。在某些时候,我需要找出“圆形”和“盒子”之间的接触点。我所知道的是可以使用b2ContactListener来完成。我们可以通过使用后解决事件实现b2ContactListener来接收联系人数据。请帮忙!

最佳答案

您处在正确的轨道上,可以使用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)在他的博客上有一些很棒的文章,介绍了它们的碰撞/ react 。在这里,我拾起了这些碎片,让他全力以赴。

我希望这有帮助。

谢谢,
加里

10-07 23:16