0

我对 javascript 和 box2d 还很陌生,我想知道是否有人知道当两个对象碰撞时我如何调用自定义函数。我尝试使用一些b2ContactListener没有任何成功的例子。我已经将一个对象放在另一个对象之上,然后让标准的 Box2d 物理来做这件事。

我收到两个控制台输出,第一个是null,第二个是Ball使用以下代码:

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

需要碰撞的两个对象是 a b2_dynamicbody(ball) 和 a 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 回答