Box2d をやってみる… チュートリアル1 (3) CCSprite と b2Body

自動落下まではできた…

今日は userData に設定した CCSprite を Box2d に結びつけるトコロをやって行こうと思います。

update()の中で随時更新する感じですね。

void HelloWorld::update(float delta)
{
    {
        float32 timeStep = (1.0f / 60.0f);
        int32 velocityIterations = 10;
        int32 positionIterations = 10;

        _world->Step(timeStep, velocityIterations, positionIterations);
    }

    //Box2dの情報をCCSpriteに反映
    {
        for (b2Body * b = _world->GetBodyList(); b; b = b->GetNext())
        {
            if (b->GetUserData())
            {
                CCSprite * ball = (CCSprite *)b->GetUserData();

                b2Vec2 b2Pos = b->GetPosition();
                CCPoint pos = ccpMult(ccp(b2Pos.x, b2Pos.y), PTM_RATIO);
                ball->setPosition(pos);

                float32 radians = b->GetAngle();
                float angle = -CC_RADIANS_TO_DEGREES(radians);
                ball->setRotation(angle);
            }
        }
    }
}

for文の回し方がおもしろいなー。
シミュレーターで動かしてみたのがこんな感じ。

box2d
box2d

おー画像も動いたー。^^

今日は、最後に、デストラクタで後片付け。 ^^;

HelloWorld::~HelloWorld()
{
    this->unscheduleUpdate();
    CC_SAFE_DELETE(_debugDraw);
    CC_SAFE_DELETE(_world);
}

static_body は明日… ^^;


Add a Comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です