【问题标题】:Box2D collision detection issue?Box2D 碰撞检测问题?
【发布时间】:2012-01-29 22:22:31
【问题描述】:

我正在使用一个非常简单的 b2ContactListener。但是,当我的对象发生碰撞时,物理上的一次碰撞会有多个回调。有没有办法修改它或添加一些检查,以便物理上只有一个碰撞的回调?我已经为此苦苦挣扎了好几个星期,但我似乎无法弄清楚:(

谁能提供任何提示或建议?

谢谢!

【问题讨论】:

    标签: ios cocos2d-iphone collision-detection box2d


    【解决方案1】:

    为此,我在我的对象上使用布尔标志。

    当一个联系人被解雇时:

    如果标志已经设置 = 忽略 否则设置标志并将对象添加到 doSomethingNowWithThis 列表中。

    这种方式只有一个联系人设置标志,其余的被忽略。防止我过度删除。

    可能有更好的方法,但这对我有用。

    在 iOS 中使用 levelhelper 的示例。

       //I register a laser to hit the roof
       [lh registerBeginOrEndCollisionCallbackBetweenTagA:PLAYERFIRE 
                                                   andTagB:ROOF 
                                                idListener:self 
                                               selListener:@selector(flagPartAToDie:)];
    
        //Then it calls this
       -(void)flagPartAToDie:(LHContactInfo*)contact {
        MyUserData* myud;
        LHSprite* part = [contact spriteA];
        myud = (MyUserData*) part.userData;
        if (!myud.DeleteMe) {
            myud.DeleteMe = YES;
            [deadParts addObject: part];            
        }    
     }
    

    【讨论】:

    • 唯一的问题是我在碰撞过程中没有破坏任何物体,而且这段代码看起来不太适合我的代码。我希望它会像 if 语句一样简单。
    • 我知道这是旧的,但原因是因为 box2d 不能在回调中删除对象。因此,“删除”对象会在一个数组中排队,以便在引擎的物理过程之外被删除。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多