キャラクターはどこで止まりますか?


12

何年も前、私は予算の擬似3Dゲーム用にAIをいくつかコーディングしました。計算方法が1つありましたが、これが最善の方法を実際に理解したことはありませんでした。例えば:

  • 敵は現在X = 540.0にいます。
  • 敵はフレームあたり10ピクセルで右に移動しています。
  • 敵が停止したい場合、速度はゼロに達するまでフレームごとに1ピクセルずつ低下します。

敵が完全に停止したときに敵が終わる位置を取得する簡単な公式はありますか?最終的にはオフセットを事前計算してハードコーディングしましたが、これは私のニーズには合っていましたが、速度の異なる敵に対して個別に計算する必要がありました。

回答:


7

私は一般的にジョンの答えに同意します。少し修正した式を提供します(これにより、彼の値にV / 2が追加されます)。

D = V / A * (V + A) / 2 

V = 10A = 1、それが取得D =を55。これはまさにの結果です

10 + 9 + 8 + 7 + .... + 3 + 2 + 1

これは敵のフレームごとの動きです。

ここに、そのステップに到達する方法を示します。

  1. V:現在の速度= 10ピクセル/フレーム、A:現在の加速度= 1ピクセル/フレーム^ 2
  2. T:停止するまでの時間= V / A = 10フレーム。
  3. 10フレームで移動した距離=フレーム1 +フレーム2 +フレーム3 + ... = V +(VA)+(V-2 * A)+ ...
  4. これはT * V-A / 2 * T *(T-1)に等しく、上記の式を単純化します。

+1ソリューションに論理的な欠陥が見当たらず、自分のソリューションにどのように遭遇したかを本当に思い出せません。だから私の表現は間違っているに違いありません、そしておそらく私は小さな違いと詳細なテストの欠如のために気づかなかったのでしょうか?速度の半分を単純に追加すると、表現が正しくなりますか?
ジョンマクドナルド

Power Calcを使用して自分の質問に答えました。私の表現+(v / 2)をとると、与えられたvとaの表現は常にあなたの表現と等しくなります。
ジョンマクドナルド

@Johnとあなたの両方のおかげで、これは当時私に多大な労力を節約してくれたでしょう!私はこの答えを受け入れています。それはよりシンプルで効率的だからですが、ジョンの答えも高く評価されています。乾杯!
-Kaivosukeltaja

6

ゲームで作業するときにまったく同じ問題が発生し、数学を正しく実行するのに永遠に時間がかかりました(ブレ)。だからここにある:

minDistanceToStop = 0.5 * acceleration * Math.Pow(velocityLinear() / acceleration, 2.0);

通常の数学に書き直されました:

(Acceleration / 2) * (linearVelocity / Acceleration)^2

あなたの場合の加速は1であり、linearVelocityは10です:

(1 / 2) * (10 / 1)^2
= 50 units to stop

編集

ジミーの結果と説明は両方とも正しい。私の式では、速度の半分も追加する必要があります。

minDistanceToStop = (0.5 * acceleration * Math.Pow(velocityLinear() / acceleration, 2.0)) + (velocityLinear() / 2);

または

((Acceleration / 2) * (linearVelocity / Acceleration)^2) + (linearVelocity / 2)
((1 / 2) * (10 / 1)^2) + (10 / 2)
= 55

2
記録のために、Math.Pow()はここではひどい、ひどいアイデアです。十分にスマートであれば、「2.0」指数を特殊なケースにすることもできますが、どのようにスライスしても、その式を「0.5 * linearVelocity * linearVelocity / Acceleration」に書き換えることは大きな勝利です。
スティーブンスタドニッキー

4

速度の変化に関する計算は、計算の要点です。私はしばらくやっていないので頭の外では覚えていませんが、あなたの状況は単に-1の積分(つまり減速)を取っていると思います。


0

この一定の加速運動ではありませんか?

X = Xi + V*t + (1/2) * a * (t^2)

場所:
X:最終位置
Xi:初期位置
V:速度
t:時間
a:加速

ここで唯一の注意が必要な部分は、-1の加速で減速し、t = V / aを計算できるため、tが10であるため、「t」を決定する方法です。

そう、
西:540
V:10
T:10
A:-1

すべてを置く:

X = 540 + 10*10 + (1/2) * (-1) * (10 ^ 2) 
X = 540 + 100 + (-50) 
X = 540 + 50 
X = 590

数式は、加速の統合をとることによって得られます。ここをチェックしてください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.