Lab

Cocos2d-x:Box2dのスプライトの削除

 Tag :  Published : 2013-10-22

Pocket

Box2dのスプライトを削除します。

1.userDataをセット

Box2dのテンプレートを使用します。テンプレートの利用に関してはこちらのページをどうぞ。

addNewSpriteAtPosition内に”bodyDef.userData = sprite;”の一行を追加します。

void HelloWorld::addNewSpriteAtPosition(CCPoint p)
{
    //途中省略
 
    b2BodyDef bodyDef;
    bodyDef.type = b2_dynamicBody;
    bodyDef.position.Set(p.x/PTM_RATIO, p.y/PTM_RATIO);
 
    //これを追加!!
    bodyDef.userData = sprite;
}
    

2.スプライトを削除

今回は、ボックスが下へ落ちて、y座標が200以下になったら削除、という感じにしてみようと思います。

cocos2d-x Box2dのスプライトを削除
void HelloWorld::update(float dt)
{
    //途中省略
    for (b2Body* b = world->GetBodyList(); b; b = b->GetNext())
    {
        if (b->GetUserData() != NULL) {
            //Synchronize the AtlasSprites position and rotation with the corresponding body
            CCSprite* myActor = (CCSprite*)b->GetUserData();
            myActor->setPosition( CCPointMake( b->GetPosition().x * PTM_RATIO, b->GetPosition().y * PTM_RATIO) );
            myActor->setRotation( -1 * CC_RADIANS_TO_DEGREES(b->GetAngle()) );
            
            //ボックスの位置を見つけて
            CCPoint point = myActor->getPosition();
            //ボックスのy座標が200以下だったら
            if(point.y < 200){
                //削除
                CCNode* sp = this->getChildByTag(kTagParentNode);
                sp->removeChild(myActor);
                world->DestroyBody(b);
            }
        }
    }
}
    

消えましたか?
DestroyBodyって表現、ちょっと怖いですよね(笑)

pageTop