我对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我希望我能够很好地解释它,有人可以引导我朝正确的方向前进吗?
答案 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);
,将事件添加到世界,使其可以收听冲突,我忘了添加,因此是我的问题。
希望有人觉得这很有用!