7

簡単に言えば、私はプラットフォームのゲームを作っています。私はまだ微積分を学ぶ年齢ではないので、導関数や積分については知りませんが、それらについては知っています。望ましい動作は、キャラクターが立っているブロックの上にあるブロックが両側にあるときに、キャラクターが自動的にジャンプすることです。たとえば、階段。このようにして、プレイヤーはジャンプキーを連打する代わりに、左/右を押し続けるだけで階段を上ることができます。

問題は、ジャンプを実装した方法にあります。私はマリオ スタイルに行き、プレイヤーが「ジャンプ」を長く押し続けてより高くジャンプできるようにすることにしました。そのために、プレーヤーの 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 の値を求める方程式が必要です。ジャンプ変数は時間の経過とともに減少するため、位置の値は単純な放物線ではありません。

4

3 に答える 3

1

摩擦項を無視し、v がゼロになる前に j がゼロになると仮定すると、次のような計算のページが表示されます。

b = 1/(8*(deceleration^2)*gravity)*j0^4 - 1/(6*deceleration^2)*j0^3

これに対する解決策は非常に長いですが、おおよそ (10 < b < 400 の場合) は次のようになります。

j0 = (10*(deceleration^2)*gravity*b)^0.25
于 2010-12-22T17:14:03.293 に答える
1

Excel 2010 とその Seek Goal 機能を広範囲に使用した後、値のテーブルを作成することができました。Excel は、おおよそのトレンドラインとその方程式を提供し、うまくいくまで微調整しました。式は j = 3.35 * h ^ 0.196 です。ここで、j は最初のジャンプ力、h はジャンプに必要な高さです。ご協力いただきありがとうございます。

于 2010-12-23T05:17:05.650 に答える
1

ここでのプレーには 2 つの困難があります。1つ目は、あなたが実際に持っているのではなくj -= 1.5、持っているということですj = max(0, j - 1.5)。それは計算にいくらかのレンチを投げかけます。また、摩擦項v *= 0.95により、直接的な解決が困難になります。

これにはルックアップテーブルを使用することをお勧めします。試行錯誤によって、a可能な各の desired を事前に計算できます (たとえば、 の値をバイナリ検索すると、 required が得られます)。結果をテーブルに保存し、ゲーム中に単純なテーブル ルックアップを行うだけです。bab

于 2010-12-22T07:45:00.270 に答える