Box2D b2ContactListener (detectarea coliziunilor)

În jocul meu, am aproximativ 6 variații diferite de obiecte. Fiecare obiect are un b2Body, b2BodyDef și b2FixtureDef atașat la acesta. În cazul meu, b2Bodys meu urmăresc CCSprites mea, deoarece Cocos2D este mai ușor cu animații.

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

Lucrul este că eu sunt destul de confuz cu privire la ceea ce face de fapt! Întrebări: 1. Codul Listener Contact în CCScene meu trebuie să fie în buclă de joc? 2. Acesta este codul său principal pentru detectarea coliziunilor sale în CCScene: 3. De asemenea, văd că în codul de mai jos el folosește etichete pentru CCSprites, înseamnă că CCSpriții mei nu trebuie să fie ivari? De asemenea, ce despre b2Bodys, b2BodyDefs și b2FixtureDefs, trebuie să fie ivars? O face doar prin etichete?

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

Lucrul este ca, înainte de a avea doar 2 lucruri care se pot ciocni. În cazul meu am 6. Deci, ar trebui să modific codul în orice fel să lucrez cu cele 6 posibile b2Bodys?

Mulțumiri!

0
Este mult mai probabil să obțineți un răspuns dacă vă concentrați asupra unei întrebări la un moment dat.
adăugat autor LearnCocos2D, sursa
răspunsul la aceasta este: Da. ;)
adăugat autor LearnCocos2D, sursa
Bine, atunci o voi dedica pentru întrebarea # 3 chiar acum
adăugat autor SimplyKiwi, sursa
Mulțumiri! De asemenea, am aflat răspunsul la numărul 1 și că este Da! : P
adăugat autor SimplyKiwi, sursa

Răspunsuri nu sunt

0
iOS dezvoltatori, România — Moldova
iOS dezvoltatori, România — Moldova
18 participanți

Parteneri: ciupacabra.com, @php_ro, @js_ro, @node_ro, @seo_ro Android: @ro_android