Box2D b2ContactListener(衝突検出)

私のゲームでは、約6種類のオブジェクトがあります。各オブジェクトには、b2Body、b2BodyDef、およびb2FixtureDefが関連付けられています。 私の場合、私のb2BodysはCocos2Dがアニメーションで簡単なので、私のCCSpritesに従っています。

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

事は、前と同じように、CANが衝突する2つのものしか持っていないということです。私の場合は6です。私は6つの可能なb2Bodysで動作するように、このコードを修正する必要がありますか?

ありがとう!

0
追加された 編集された
ビュー: 1
一度に1つの質問に集中すれば、答えが出る可能性が高くなります。
追加された 著者 LearnCocos2D,
それに対する答えは:はい。 ;)
追加された 著者 LearnCocos2D,
さて、私は今質問3にこれを捧げるつもりです
追加された 著者 SimplyKiwi,
ありがとう!私は#1への答えも見つけました。それははいです! :P
追加された 著者 SimplyKiwi,

答えはありません

0