Проблема обнаружения столкновения Box2D? - PullRequest
1 голос
/ 30 января 2012

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

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

Спасибо!

1 Ответ

2 голосов
/ 30 января 2012

Для этого я использую флаг 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];            
    }    
 }
...