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; }
猫が魚にぶつかったら、
魚が消えて、衝突判定のメッセが表示されます。
次はぶつかった方が消える時にエフェクト出したり、ポイント加算したり、など。