アクセラレーション関連の作業を試してみたいと思うかもしれません。
地球の重力について考えてみましょう (a = 9.81 メートル/秒)。ボールを空にまっすぐ投げると、ボールは次の速度で始まります。たとえば、毎秒 5 メートル (正の速度) としましょう。しばらくすると、重力によってボールの速度が 0 に引き下げられるため、ボールはそれ以上高くなりません。この直後、重力によってボールが地面に落ちるまで引き下げられます。(負の速度)
ボールが上下ではなく左から右に動くゲームでこれについて話している場合は、このようなものを使用できます。ボールを投げる瞬間は、ゲーム内で方向転換のコマンドを送る瞬間です。ボールは以前の方向に進み続け、遅くなり、停止し、方向を変え、最終的には、方向を変える別のコマンドを送信するまで (または壁/地面にぶつかるまで) どんどん速くなります。その場合、使用したい加速度を逆にする必要があるため、すべてが逆に繰り返されます。
ボールが右に移動する場合は正の加速度、ボールが左に移動する場合は負の加速度です。
式として、次のようなものを使用できます
v = (int) (a * t + v0);
v0 = v;
v は次の速度、a は使用する加速度、t は経過時間、v0 は現在の速度です。t は、最後の方向転換からのナノ時間をカウントする必要があります。(int) は全体を整数にキャストするため、これを直接使用して画面上のボール/グラフィックを移動できます。
これを毎フレーム繰り返します。
あなたが使用できる方向転換のために
t = 0;
a = a * (-1);
t は再び 0 にする必要があります。そうしないと、バグが発生します。これがお役に立てば幸いです。