Box2D b2ContactListener (botsdetectie)

In mijn spel heb ik ongeveer 6 verschillende variaties van objecten. Aan elk object is een b2Body, b2BodyDef en b2FixtureDef gekoppeld. In mijn geval volgen mijn b2Bodys mijn CCSprites omdat Cocos2D gemakkelijker is met animaties.

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

Het punt is dat ik nogal in de war ben over wat hij eigenlijk aan het doen is! vragen: 1. Moet mijn Contact Listener-code in mijn CCScene in mijn gamelus zitten? 2. Dit is zijn hoofdcode voor zijn collision detection in zijn CCScene: 3. Ook zie ik dat hij in de onderstaande code tags gebruikt voor zijn CCSprites, betekent dit dat mijn CCSprites geen ivars hoeven te zijn? En hoe zit het met mijn b2Bodys, b2BodyDefs en b2FixtureDefs, moeten het ivars zijn? Doet hij het gewoon met tags?

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

Het ding is, net als eerder heeft hij maar 2 dingen die CAN kunnen botsen. In mijn geval heb ik 6. Dus zou ik die code op welke manier dan ook moeten aanpassen om met mijn 6 mogelijke b2Bodys te werken?

Bedankt!

0
Je hebt meer kans om een ​​antwoord te krijgen als je je op één vraag tegelijk concentreert.
toegevoegd de auteur LearnCocos2D, de bron
het antwoord daarop is: Ja. ;)
toegevoegd de auteur LearnCocos2D, de bron
Oke, dan zal ik dit nu voor vraag 3 opdragen
toegevoegd de auteur SimplyKiwi, de bron
Bedankt! Ik ontdekte ook het antwoord op # 1, en dat is ja! : P
toegevoegd de auteur SimplyKiwi, de bron

Geen antwoorden

0