1

モバイル用のbox2dを使用してゲームを開発しています。これらのコードで世界を作成しました:

b2Vec2 gravity(0.0f, 9.8f);
bool doSleep = false;
b2World* g_World = new b2World(gravity, doSleep);

それはとてもうまくいっています.私はプレーヤーオブジェクトを持っています.プレーヤーは次のように倒れます:

y 軸: 0、10、30、70 など。毎秒速く落ちているということですが、同じ速度で落ちたいです。のように: y 軸: 0、10、20、30 など

4

1 に答える 1

2

体は重力の影響で落下するので、加速度を持って落下するのは理にかなっています。

あなたの世界に重力があってはならない場合は、ゼロ重力ベクトルを設定し、体の線形速度を設定します。

b2Vec2 gravity(0.0f, 0f);
bool doSleep = false;
b2World* g_World = new b2World(gravity, doSleep);

b2Body* body;
<.. creating body ..>
body->setLinearVelocity(0, 10);

あなたの世界で重力が必要な場合は、b2BodyDef で重力スケールをゼロに設定します。

b2Vec2 gravity(0.0f, 9.8f);
bool doSleep = false;
b2World* g_World = new b2World(gravity, doSleep);

b2BodyDef bodyDef;
bodyDef.gravityScale = 0;
< .. set other body parameters ..>
b2Body* body;
<.. creating body ..>
body->setLinearVelocity(0, 10);

古いバージョンの Box2D を使用していて、b2BodyDef にそのようなフィールドがない場合は、次の 2 つの解決策があります。

  • 上記のコードのように一度線形速度を設定し、各更新ステップで重力と反対の力を適用します。

    // Update cycle
    g_World->Step(elapsed, 7, 4);
    body->ApplyForceToCenter(-gravity);
    
  • フィリップが言ったように、各更新ステップで線形速度を適用します。

    // Update cycle
    g_World->Step(elapsed, 7, 4);
    body->ApplyLinearVelocity(0, 10);
    
于 2013-02-24T17:52:58.190 に答える