【问题标题】:Box2D collision detection?Box2D 碰撞检测?
【发布时间】:2011-10-18 02:21:00
【问题描述】:

我正在向我的 CCScene 添加一个 b2BodyDef,如下所示:

    b2BodyDef platformBodyDef;
    platformBodyDef.type = b2_dynamicBody;
    platformBodyDef.position.Set(40, 495);
    platformBodyDef.userData = platforms;
    _body = _world->CreateBody(&platformBodyDef);

我知道我应该使用联系侦听器,但我是 Box2D 的新手,这对我来说就像另一种语言,所以我将如何对其进行编码以查看我的 CCScene 中的一个 CCSprite 是否与此 b2BodyDef 冲突?这个 b2BodyDef 将制作动画,但我现在并不担心。 有谁知道我该怎么做?

谢谢!

【问题讨论】:

    标签: ios cocos2d-iphone box2d


    【解决方案1】:

    有一个很好的教程描述了如何做到这一点here

    基本上你要做的是创建一个contactListener来监听body之间的碰撞。确保您的精灵被标记,然后在接触侦听器中加载碰撞的两个对象的 spriteData。通过检查标签,您可以识别碰撞的精灵。

    从那里你几乎可以做任何事情,因为你有对精灵、身体和世界的引用。例如,如上述示例,移除砖块。

    【讨论】:

    • 自从我做了这个帖子,我成功地将它添加到我的项目中。但我目前面临的问题是如何停止一次碰撞的多个回调。你知道这是否可能吗?
    • 抱歉,回复晚了——希望它可以帮助其他人......在contactListener的precalc方法中,您可以取消事件。因此,您可以使用要在该方法中删除的标签来标记正文,然后取消该事件。然后,当您遍历所有主体并更新它们的位置等时...如果精灵被标记为要删除,则将其删除。
    • 这就是我所做的,我只是在它发生碰撞时立即更改标签,然后碰撞 if 语句不再为该碰撞调用!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多