3

私はbox2dゲームを作成していて、画面の左側から右側に敵を飛ばしています。以下に示すようなティック法で力を加えると、敵は時間の経過とともにますます速く移動します。敵の速度を上げるのではなく、一定のペースで移動させたい。これどうやってするの。インパルスとフォースを試しましたが、一定の速度を維持していないようです

b2Vec2 forceA = b2Vec2(15, -b->GetMass() * world->GetGravity().y);
b->ApplyForce(forceA, b->GetWorldCenter() );
4

2 に答える 2

2

必要な速度で作成するだけです。

b2BodyDef bDef;
...
bDef.linearVelocity = myVelocity;
b2Body *b = world->createBody(&bDef);

力が加わらない場合、ニュートンの第一法則に従って速度を維持します。重力がある場合は、各ステップで力を適用します。

b2Vec2 forceA = b2Vec2(0, -b->GetMass() * world->GetGravity().y);
b->ApplyForce(forceA, b->GetWorldCenter() );
于 2011-09-24T18:59:01.120 に答える
1

使用してb->SetLinearVelocity(b2Vec2(thisVel, 0));ください。この一定速度が最終的に他の一定速度に変更される可能性がある場合は、これを次のような条件でラップできます。

if(b->GetLinearVelocity().x != 0){ 
    b->SetLinearVelocity(b2Vec2(0, 0));
}

そのため、ティックごとに同じ速度を再適用することはありません (box2d がこれを処理する可能性はありますが、それについてはわかりません)。

私は体を一定の速度で動かす方法について同じ問題に遭遇しました。私が推奨するもう1つのことは、体が移動する表面/媒体が摩擦がないことを確認することです.あなたは彼らの速度を設定します。

于 2012-07-14T11:52:09.000 に答える