Box2D b2ContactListener (détection de collision)

Dans mon jeu, j'ai environ 6 variantes d'objets différentes. Chaque objet est associé à b2Body, b2BodyDef et b2FixtureDef. Dans mon cas, mes b2Bodys suivent mes CCSprites puisque Cocos2D est plus facile avec les animations.

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

La chose est que je suis assez confus sur ce qu'il fait réellement! Des questions: 1. Est-ce que mon code Contact Listener dans mon CCScene doit être dans ma boucle de jeu? 2. C’est son code principal pour la détection de collision dans son CCScene: 3. Je vois aussi que, dans le code ci-dessous, il utilise des balises pour ses CCSprites. Cela signifie-t-il que mes CCSprites ne doivent pas nécessairement être ivars? Et que dire de mes b2Bodys, b2BodyDefs et b2FixtureDefs, doivent-ils être des ivars? Fait-il juste par balises?

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"];
}

La chose est, comme avant, il a seulement 2 choses qui peuvent entrer en collision. Dans mon cas, j'en ai 6. Donc, devrais-je modifier ce code de quelque manière que ce soit pour travailler avec mes 6 b2Bodys possibles?

Merci!

0
Vous aurez plus de chances d'obtenir une réponse si vous vous concentrez sur une question à la fois.
ajouté l'auteur LearnCocos2D, source
la réponse à cette question est: oui. ;)
ajouté l'auteur LearnCocos2D, source
Bon alors je vais dédier cela à la question # 3 maintenant
ajouté l'auteur SimplyKiwi, source
Merci! J'ai aussi trouvé la réponse à la question 1: Oui! : P
ajouté l'auteur SimplyKiwi, source

Il n'y a pas de réponses.

0