Для этого я использую флаг bool на своих объектах.
Когда контакт срабатывает:
, если флаг уже установлен = просто игнорировать, иначе установите флаг и добавьте объект всписок doSomethingNowWithThis.
Таким образом, только один контакт устанавливает флаг, а остальные игнорируются.Предотвращает чрезмерное удаление.
Возможно, есть лучший способ, но это работает для меня.
Пример использования levelhelper в iOS.
//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];
}
}