shanon's note

プログラミングとアニメがすき

cocos2dx 3.0 衝突された側の物体を消す #cocos2dx

物体同士の衝突を検出するところまでできたので、
次は衝突された側の物体を消去するロジックを組みます。

衝突される側にsetTagしておく。(ぶつかって消える方を"2"と定義した。)

    //魚画像
    Sprite* fish = Sprite::create("fish01.png");
    fish->setPosition(Point(visibleSize.width, visibleSize.height / 2));
    fish->setTag(2);


衝突時に呼ばれる関数。
getChildByTagで"2"を呼んでremoveします。というかなりシンプルなロジック。
こんなに簡単に書けるの、やっぱりcocos2dx v3すごい。
sequenceで実行してるのはたぶんもっと簡単なやり方があると思うけど、とりあえず動いたので一旦パス。

bool HelloWorld::onContactBegin(PhysicsContact& contact)
{
    auto text = Label::createWithSystemFont("Collision Detected!", "HiraKakuProN-W6", 48);
    text->setPosition(Point(300, 200));
    this->addChild(text);
    
    // sprite取得
    auto sprite = this->getChildByTag(2);
    
    //callbackでの消去処理
    auto removeSprite = CallFunc::create([this, sprite]() {
        this->removeChild(sprite);
    });
    
    // 順次実行
    auto sequence = Sequence::create(removeSprite, NULL);
    sprite->runAction(sequence);
    
    return true;
}

f:id:shanonim:20140923174131p:plain

猫が魚にぶつかったら、

f:id:shanonim:20140923174152p:plain

魚が消えて、衝突判定のメッセが表示されます。
次はぶつかった方が消える時にエフェクト出したり、ポイント加算したり、など。

参考記事:
C++ - Cocos2d-x 3.0でスプライトの生成、移動、削除、イベント - Qiita