当对象发生碰撞时,Box2dWeb调用函数

时间:2014-04-14 17:43:23

标签: javascript box2d collision box2dweb

我对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());
};. 

需要碰撞的两个物体是b2_dynamicbody(球)和b2PolygonShape。 (长方形)。在我的Ball.js中使用bodyDef.userData = "Ball";,在我的Mouse.js中使用bodyDef.userData = "Mouse";,我会尝试识别它们是否被击中。相反,只显示球。

接下来我确定这不是检测碰撞的正确方法:P我希望我能够很好地解释它,有人可以引导我朝正确的方向前进吗?

1 个答案:

答案 0 :(得分:0)

好的,我自己解决了,显然我必须将自定义事件添加到我用box2d创建的世界。所以,这个问题是通过我阅读大块的box2d文档/手册来解决的,可以找到here:

我开始将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);,将事件添加到世界,使其可以收听冲突,我忘了添加,因此是我的问题。

希望有人觉得这很有用!