Box2d をやってみる… チュートリアル2 (2)ApplyLinearImpulse

前回の準備で、とりあえずボールが跳ねて元の位置に戻るところまで準備…

今日は… ApplyLinearImpulse を試してみよう。

Ball の b2Bodyオブジェクトの ApplyLinerImpulse を呼び出してみる…こんな感じかな ^^;

    {
        b2BodyDef bodyDef;

        bodyDef.type = b2_dynamicBody;
        bodyDef.userData = sprite;
        bodyDef.position.Set(pos.x / PTM_RATIO, pos.y / PTM_RATIO);

        body = _world->CreateBody(&bodyDef);

        //TEST
        {
            b2Vec2 force = b2Vec2(10, 10);
            body->ApplyLinearImpulse(force, bodyDef.position);
        }
    }

試してみるか…あれ!?
ボールが枠の外へ…コードを見直してみると…あー 枠のエッジ作成時に pixel->m変換 してない ^^;

以下のように修正 ^^;

    if (_groundBody)
    {
        b2EdgeShape shape;

        b2FixtureDef fixtureDef;
        fixtureDef.shape = &shape;

        shape.Set(b2Vec2(0.0f, 0.0f),
                  b2Vec2(visibleSize.width / PTM_RATIO, 0.0f));
        _bottomFixture = _groundBody->CreateFixture(&fixtureDef);

        shape.Set(b2Vec2(0.0f, 0.0f),
                  b2Vec2(0.0f, visibleSize.height / PTM_RATIO));
        _groundBody->CreateFixture(&fixtureDef);

        shape.Set(b2Vec2(visibleSize.width / PTM_RATIO, visibleSize.height / PTM_RATIO),
                  b2Vec2(0.0f, visibleSize.height));
        _groundBody->CreateFixture(&fixtureDef);

        shape.Set(b2Vec2(visibleSize.width / PTM_RATIO, visibleSize.height / PTM_RATIO),
                  b2Vec2(visibleSize.width / PTM_RATIO, 0.0f));
        _groundBody->CreateFixture(&fixtureDef);
    }

ボールも跳ね返ってきたところで今日はココまで ^^;


Add a Comment

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