ここでの問題は、あなたがあなたの物理学を間違えたことです!しかし、それは簡単な修正なので、それは問題ありません。
スプライトの位置でupdateメソッドを呼び出すときは、最初に加速を設定する必要があります。このゲームでは重力が一定であると思いますので、一度設定するだけで済みます。(-9.81、または同様のもの。)
次に、y方向のキャラクターの速度をvelocity = old_velocity + Acceleration*timeで更新します。
これを行った後、同様の方法で位置を更新します:位置=old_position+速度*時間。
位置を更新するために使用している方程式は、デルタが合計経過時間であり、タイムステップではない場合にのみ有効です。(私は、デルタが時間ステップであると想定しました。これは、物理ゲームが通常プログラムされる方法だからです。)
これがお役に立てば幸いです。詳細を知りたい場合は、suvat方程式を確認してください。初期速度と一定の加速度がわかっている場合は、最終的な位置を計算できることがわかります。ゲームの速度は、ジャンプや衝突を行うと変化します。したがって、それが現実的でないことは驚くことではありません。他にご不明な点がございましたら、コメントしていただければ、さらにサポートさせていただきます。
編集:OpenGLを使用して描画されたいくつかのボックスを使用して、ここで行ったことを正確に再プログラムしました。位置を更新する方法が機能していないようです。dt
またはタイムステップが1.0dの場合にのみ、ボックスが正しく落下するように見えますが、その理由はわかりません。その後、何かと衝突すると、バウンドするのではなく、すべて一緒に停止します。正確な理由はわかりません。
ただし、画面上には、説明した物理演算を使用する別のボックスもあります
v = u + a*t
。s = s_last + v*t
ボックスは期待どおりに落下し、正しく跳ね返ります。単純化により、バウンス時にエネルギーが失われます。