我使用的是一个非常简单的b2ContactListener。但是,当我的对象发生碰撞时,物理上会发生一次碰撞的多次回调。有没有办法修改它或添加一些检查,以便一次碰撞只有一个回调物理?几个星期以来,我一直在努力解决这个问题,我似乎无法弄清楚这一点:(
任何人都可以提供任何提示或建议吗?
谢谢!
答案 0 :(得分:2)
我在我的对象上使用bool标志。
联系人被解雇时:
如果已经设置了标志=只是忽略 else设置标志并将对象添加到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];
}
}