Box2D b2ContactListener (обнаружение столкновений)

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

Anyway I am trying to follow Ray Wenderlich's tutorial: http://www.raywenderlich.com/606/how-to-use-box2d-for-just-collision-detection-with-cocos2d-iphone

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

std::vectortoDestroy;
std::vector::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::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?

Благодаря!

0
Вы, скорее всего, получите ответ, если сосредоточьтесь на одном вопросе за раз.
добавлено автор LearnCocos2D, источник
ответ на это: Да. ;)
добавлено автор LearnCocos2D, источник
Хорошо, тогда я посвящу это для вопроса № 3 прямо сейчас
добавлено автор SimplyKiwi, источник
Благодаря! Я также узнал ответ на # 1, и это Да! :П
добавлено автор SimplyKiwi, источник

Ответов нет

0
Mobile Dev Jobs — вакансии и аналитика
Mobile Dev Jobs — вакансии и аналитика
6 187 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению iOS, Android, Xamarin и т.д. ВАЖНО: Правила публикации и правила канала: Ссылка – https://telegra.ph/Pravila-oformleniya-vakansij-i-rezyume-11-09-2

iOS Developers — русскоговорящее сообщество
iOS Developers — русскоговорящее сообщество
2 400 участник(ов)

Общаемся на темы, посвященным iOS-разработке, Swift, Objective-C, SDK, Rx, Cocoa и т.д.