【发布时间】:2012-01-29 22:22:31
【问题描述】:
我正在使用一个非常简单的 b2ContactListener。但是,当我的对象发生碰撞时,物理上的一次碰撞会有多个回调。有没有办法修改它或添加一些检查,以便物理上只有一个碰撞的回调?我已经为此苦苦挣扎了好几个星期,但我似乎无法弄清楚:(
谁能提供任何提示或建议?
谢谢!
【问题讨论】:
标签: ios cocos2d-iphone collision-detection box2d
我正在使用一个非常简单的 b2ContactListener。但是,当我的对象发生碰撞时,物理上的一次碰撞会有多个回调。有没有办法修改它或添加一些检查,以便物理上只有一个碰撞的回调?我已经为此苦苦挣扎了好几个星期,但我似乎无法弄清楚:(
谁能提供任何提示或建议?
谢谢!
【问题讨论】:
标签: ios cocos2d-iphone collision-detection box2d
为此,我在我的对象上使用布尔标志。
当一个联系人被解雇时:
如果标志已经设置 = 忽略 否则设置标志并将对象添加到 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];
}
}
【讨论】: