簡単に言えば、私はプラットフォームのゲームを作っています。私はまだ微積分を学ぶ年齢ではないので、導関数や積分については知りませんが、それらについては知っています。望ましい動作は、キャラクターが立っているブロックの上にあるブロックが両側にあるときに、キャラクターが自動的にジャンプすることです。たとえば、階段。このようにして、プレイヤーはジャンプキーを連打する代わりに、左/右を押し続けるだけで階段を上ることができます。
問題は、ジャンプを実装した方法にあります。私はマリオ スタイルに行き、プレイヤーが「ジャンプ」を長く押し続けてより高くジャンプできるようにすることにしました。そのために、プレーヤーの Y 速度に追加される「ジャンプ」変数を用意しました。ジャンプ変数は、「ジャンプ」キーを押すと設定値まで増加し、「ジャンプ」キーを放すと非常に急速に減少しますが、「ジャンプ」キーを押している間は減少が遅くなり、継続的な加速が提供されます。 「ジャンプ」を押している間、上に移動します。これにより、視覚的に不快な急激な加速ではなく、流れるようなジャンプが実現します。
したがって、変数の階段の高さを考慮するために、階段の高さに正確にジャンプするために「ジャンプ」変数が取得する必要がある値を正確に計算できるようにしたいと考えています。できればそれ以上でもそれ以下でもありませんが、多少多くても構いません。このようにして、キャラクターは急な階段や浅い階段を、奇妙に見えたり遅くなったりすることなく飛び上がることができます。
基本的に 5 つの変数が関係しています。
h -the height the character needs to jump to reach the stair top<br>
j -the jump acceleration variable<br>
v -the vertical velocity of the character<br>
p -the vertical position of the character<br>
d -initial vertical position of the player minus final position<br>
Each timestep:<br>
j -= 1.5; //the jump variable's deceleration<br>
v -= j; //the jump value's influence on vertical speed<br>
v *= 0.95; //friction on the vertical speed<br>
v += 1; //gravity<br>
p += v; //add the vertical speed to the vertical position<br>
v-initial is known to be zero<br>
v-final is known to be zero<br>
p-initial is known<br>
p-final is known<br>
d is known to be p-initial minus p-final<br>
j-final is known to be zero<br>
j-initial is unknown<br>
これらすべての事実が与えられた場合、j を解く方程式をどのように作成できますか?
tl;dr どうすれば計算できますか?
ここまでたどり着き、この問題を解決しようと決心したすべての人に感謝します。
編集: これは、Excel の例で作成したグラフです。
希望する B の値から A の値を求める方程式が必要です。ジャンプ変数は時間の経過とともに減少するため、位置の値は単純な放物線ではありません。