Box2D b2ContactListener (обнаружение столкновений) - PullRequest
0 голосов
/ 12 ноября 2011

В моей игре у меня есть около 6 различных вариаций объектов.К каждому объекту прикреплены b2Body, b2BodyDef и b2FixtureDef.В моем случае мои b2Bodys следуют за моими CCSprites, поскольку Cocos2D проще с анимацией.

В любом случае я пытаюсь следовать учебному пособию Рэя Вендерлиха: http://www.raywenderlich.com/606/how-to-use-box2d-for-just-collision-detection-with-cocos2d-iphone

Дело в том, что я совершенно запуталсячто он на самом деле делает!Вопросы: 1. Должен ли мой код прослушивателя контактов в моей CCScene быть в моей игровой петле?2. Это его основной код для обнаружения коллизий в его CCScene: 3. Также я вижу, что в приведенном ниже коде он использует теги для своих CCSprites, означает ли это, что мои CCSprites не обязательно должны быть иварами?А как насчет моих b2Bodys, b2BodyDefs и b2FixtureDefs, они должны быть иварами?Он просто делает это по тэгам?

std::vector<b2Body *>toDestroy;
std::vector<MyContact>::iterator pos;
for(pos = _contactListener->_contacts.begin();
    pos != _contactListener->_contacts.end(); ++pos) {
    MyContact contact = *pos;

    b2Body *bodyA = contact.fixtureA->GetBody();
    b2Body *bodyB = contact.fixtureB->GetBody();
    if (bodyA->GetUserData() != NULL && bodyB->GetUserData() != NULL) {
        CCSprite *spriteA = (CCSprite *) bodyA->GetUserData();
        CCSprite *spriteB = (CCSprite *) bodyB->GetUserData();

        if (spriteA.tag == 1 && spriteB.tag == 2) {
            toDestroy.push_back(bodyA);
        } else if (spriteA.tag == 2 && spriteB.tag == 1) {
            toDestroy.push_back(bodyB);
        }
    }
}

std::vector<b2Body *>::iterator pos2;
for(pos2 = toDestroy.begin(); pos2 != toDestroy.end(); ++pos2) {
    b2Body *body = *pos2;
    if (body->GetUserData() != NULL) {
        CCSprite *sprite = (CCSprite *) body->GetUserData();
        [_spriteSheet removeChild:sprite cleanup:YES];
    }
    _world->DestroyBody(body);
}

if (toDestroy.size() > 0) {
    [[SimpleAudioEngine sharedEngine] playEffect:@"hahaha.caf"];
}

Дело в том, что раньше у него было только 2 вещи, которые МОГУТ столкнуться.В моем случае у меня 6. Так что мне нужно будет каким-либо образом изменить этот код для работы с моими 6 возможными b2Bodys?

Спасибо!

...