2012-01-29 3 views
1

Я использую очень простой b2ContactListener. Однако, когда мои объекты сталкиваются, есть несколько обратных вызовов для одного столкновения физически. Есть ли способ изменить это или добавить некоторые проверки, чтобы физически было только один обратный вызов для одного столкновения? Я боролся с этим в течение нескольких недель, и я просто не могу понять это :(Проблема с обнаружением столкновения Box2D?

Можно ли предлагать какие-либо советы или предложения

Спасибо!

ответ

2

Я использую флаг Его на? Моем объекты для этого

Когда контакт срабатывает:..

если флаг установлен уже = просто игнорировать еще установить флаг и добавить объект в список 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];    
    }  
} 
+0

Единственная проблема заключается в том, что я не уничтожаю никаких тел во время столкновения, и этот код не похож на то, что он легко вписывается в мой код. Я надеялся, что это будет так же просто, как и утверждение if. –

Смежные вопросы