ジャンプボタンを押している時間に応じてキャラクターをジャンプさせたいです。ジャンプ ボタンを押したままスプライトの y 位置に追加しようとしましたが、ジャンプに現実感がありません。私の増分はあまりにも一定です。ジャンプの頂点に達したときに y の増分が減少するようにするにはどうすればよいですか?
3 に答える
正弦関数を使用して、特定の時間の高さを計算します。「リアル」な感じを与えるために必要な大まかな形をしており、あらゆる種類の言語ライブラリでライブラリ関数として利用できます。
ただし、プレイヤーが崖から飛び降りた場合などは機能しません。これは、開始高度を下回るとサイン関数が向きを変え、反対方向に移動し始めるためです。
そのため、その時点で変更するハイブリッド アプローチを使用するか、より現実的な物理学を使用します。つまり、プレイヤーが地面を離れた瞬間に下向きの加速が開始されます。後者の場合、ボタンを押し続けるとどうなるかを理解する必要があります。
プレイアビリティに関しては、サインを使用して、プレーヤーが元の高度に戻った時点で加速が停止し、速度はそこから一定のままであると言うのが実際には有利な場合があります。
これを実装するために私が考えるいくつかの方法があります。
- あなたのキャラクターが「燃料」が限られているジェットパックを持っていると想像してください。次に、加速は残りの燃料に反比例するため、彼は高い加速から始めて、パックが「燃料」を使い果たすか、ユーザーがジャンプ ボタンを離すまで減速します。その時点で、加速度は重力 (負) に戻り、キャラクターは落下を開始します。(この話では、少なくとも、ユーザーがジャンプ ボタンを押している間、上昇し続けることは理にかなっています)。
- 正弦関数、対数関数、または平方根など、ジャンプの持続時間を y 値にマッピングするには、勾配が減少する (ただし正の) 非線形関数を使用します。これは (1) のより一般的なケースです。
ジャンプ ボタンがプレイヤー キャラクターの「ジャンプ エネルギー」をチャージすることを想像してみてください (現実の世界では、膝を曲げて高くジャンプし、効果的により多くのエネルギーをジャンプに送り込むことができます)。
特定の高さでのエネルギーは、式 によって決定されますE = m g h
。ここで、m
は移動する物体の質量g
、重力定数、およびh
達成された高さです。特定のジャンプを獲得するために必要な「発射」速度は、その速度での運動エネルギーによって決定されることに注意してE = m v²/2
くださいh = v²/(2g)
。
したがって、私は 2 次 (境界あり、不可能な高さまでジャンプさせたくない) または時間の経過に伴うジャンプの高さの線形成長を試すことをお勧めしますh
。