Javascript 对象碰撞时的Box2dWeb调用函数

Javascript 对象碰撞时的Box2dWeb调用函数,javascript,box2d,collision,box2dweb,Javascript,Box2d,Collision,Box2dweb,我对javascript和box2d相当陌生,我想知道是否有人知道当两个对象发生冲突时如何调用自定义函数。我尝试使用一些使用b2ContactListener的示例,但没有成功。我把一个物体放在另一个上面,让标准的Box2d物理来做它的事情 我收到两个控制台输出,第一个是null,第二个是Ball,代码如下: var listener = new Box2D.Dynamics.b2ContactListener; listener.BeginContact = function(contact)

我对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());
};. 
bodyDef.userData = "Car";
需要碰撞的两个对象是
b2_dynamicbody
(球)和
b2PolygonShape
。(矩形)。使用
bodyDef.userData=“Ball”
在my Ball.js和
bodyDef.userData=“Mouse”
在我的Mouse.js中,我尝试识别它们是否被击中。相反,只显示球


除此之外,我确信这不是检测碰撞的正确方法:p我希望我已经解释得足够清楚了,有人能把我引向正确的方向吗?

好的,我自己解决了,显然我必须将我的自定义事件添加到我用box2d创建的世界中。因此,通过阅读大量的box2d文档/手册,问题得以解决

我首先向每个可能发生碰撞的对象添加一个字符串作为
UserData()
,并且除了碰撞之外,还必须执行其他操作。使用以下代码:

var listener = new Box2D.Dynamics.b2ContactListener;
listener.BeginContact = function(contact) {
    console.log(contact.GetFixtureA().GetBody().GetUserData()); 
    console.log(contact.GetFixtureB().GetBody().GetUserData());
};. 
bodyDef.userData = "Car";
注意:每个对象都必须有自己唯一的字符串

然后,我创建了一个新的联系人侦听器(在我上面的问题中进行了阐述),并侦听设备之间的冲突。当发生这种情况时,我将fixture
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)将事件添加到世界中,使其能够侦听冲突,而我忘记添加冲突,这就是我的问题

希望有人觉得这个有用