1

最近、アプリに重力を実装しましたが、正しく機能させることができません。コードを実行するたびに、重力を適用する代わりに位置を設定しているかのように、ゲーム内のキャラクターが即座にドロップします。

したがって、ゲーム ループに次のコードがあります (また、dTime はゲーム ループのデルタ時間です)。

float fVelocity = 0;
fVelocity -= GRAVITY * dTime;
velocity += fVelocity * dTime;
pos.y = clampf(velocity, -MAXSPEED, MAXSPEED);

次に、重力と MAXSPEED は次のように定義されます。

#define GRAVITY 100
#define MAXSPEED 500

では、この問題を引き起こしている可能性のある、間違っているように見えるものはここにありますか?

ありがとう!

4

2 に答える 2

2

速度の代わりに位置を設定しています。'velocity'変数を定義する場所は表示されませんが、ゼロから始まると想定しています。スプライトの実際の位置で初期化する必要がありますが、各変数を異なる方法で定義して理解しやすくすることをお勧めします。

-- Inside you setup --
float acceleration = 0;
float velocity = 0
float positionY = 100;

-- Inside your update --
acceleration += -GRAVITY * dT;
velocity += acceleration * dT;
positionY += velocity * dT;

クランプは含まれていませんが、好きなようにクランプできます。

ちなみに、フレームレートが低下したかのように、変数にdTを掛けたくない人もいます。プレーヤーは非常に大量に移動するため、正確なタイミングが必要なゲームをプレイするのは非常に困難です。dTを掛けないと、物理学はゲームに遅れをとることになります。

于 2012-08-05T11:10:07.607 に答える