【问题标题】:Box2dWeb call function when objects collide物体碰撞时 Box2dWeb 调用函数
【发布时间】:2014-04-22 18:23:32
【问题描述】:

我对 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 我希望我已经解释得足够好,有人可以引导我朝着正确的方向前进吗?

【问题讨论】:

    标签: javascript box2d collision box2dweb


    【解决方案1】:

    好的,我自己解决了,显然我必须将我的自定义事件添加到我使用 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); 以将事件添加到世界,使其能够监听我忘记添加的碰撞,因此这是我的问题。

    希望有人觉得这很有用!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-05
      • 1970-01-01
      • 2023-03-15
      • 2011-11-11
      • 2017-06-29
      相关资源
      最近更新 更多