2

私はゲームを作っているので、オブジェクトが特定の高さまで落ちるのにどれくらいの時間がかかるかを把握する必要があります。

オブジェクトには、初期y値(y)、初期垂直速度(vy)、重力定数(重力)、および落下するはずの垂直ターゲット距離(目的地)があります。

私はループを使用してこれを理解することができます:

int i = 0;
while(y < destination) {
    y += vy;
    vy += gravity;
    i++;
}
return i;

これに関する唯一の問題は、数百のオブジェクトに対してこれを実行する必要があり、フレームごとに実行する必要があることです。

ある種の公式を使用してこれを理解する方法はありますか?そうすれば、この問題を理解しながらゲームをスピードアップできます。

ありがとう

4

4 に答える 4

1

これは、初等物理学(運動学)を使用して明示的に解決できます。

初期速度v、一定の加速度a、および固定距離xが与えられた場合、時間は次のようになります。

(1/2)at ^ 2 + vt-x = 0

また

at ^ 2 + 2vt-2x = 0

その二次方程式を解き、正の時間を取ります。

于 2011-07-20T20:27:02.917 に答える
0

チェックアウト: http: //en.wikipedia.org/wiki/Equations_for_a_falling_body

于 2011-07-20T20:26:15.923 に答える
0

The only problem with this is that I need to do this for several hundred objects and I have to do it every frame.

パフォーマンスが重要な場合は、*sと^sが多い数式はおそらく状況に合わないと思います。

シミュレーションが正確である必要があるかどうか、あなたの目的が何であるかはわかりませんが、パーティクルシステムをチェックすることはできると思います。これは単なる一般的な方法であり、プログラムを直接高速化することはできませんが、この分野で役立つ可能性のある多くの研究が行われています。また、これを読んで、これについてもっと知ることができます。

また、あなたの方法はを使用するだけなので、+かなり効率的だと思います。オブジェクトのレンダリングが本当に難しい場合を除いて、数百は問題になりません。ほとんどの数式は、おそらくプログラムの見栄えを良くしますが、うまく機能しません。参考までに、私はかつてかなり古いマシンでほぼ10000個のパーティクルをレンダリングしましたが、それはうまく機能しました。

于 2011-07-20T20:28:14.210 に答える
0

初期 (垂直) 速度vと加速度 (重力による) aが与えられた場合、距離dを移動するのに何フレームかかるかを知りたいとします。

nフレーム後の移動距離は

vn + Σ(0≤<em>j< n ) aj = vn + ½ an ( n −1)

したがって、 d = vn + ½ an ( n −1) を設定し、nについて解きます。

d = vn + ½ an ( n −1)
∴ ½ an 2 + n ( v − ½ a ) − d = 0

次に、二次式を使用してnを取得します。

n = (½ av ± √(( v − ½ a ) 2 − 2 ad )) / a


他の回答のいくつかは、ニュートンの運動方程式の通常の解を参照していますが、これらは連続方程式に対してのみ機能します。ここには離散シミュレーションがあるため、近似ではなく正確な答えが必要な場合は、上記のように積分ではなく合計が必要です。

この種の予測コードを初めて書かなければならなかったのは、戦車が互いに砲弾を発射するゲームでした。狙いを定めるのを助けるために、ゲームは、砲弾が着弾すると予測される位置で地面にターゲットレチクルを描きました。最初の試みでは、連続運動方程式の通常の解を使用しましたが、結果はかなりかけ離れたものでした。シミュレーションの離散性は結果に顕著な違いをもたらし、一部のアプリケーション (ターゲット レチクルの描画など) では、予測とシミュレーションの間の一致が不可欠です。

于 2011-07-20T20:34:46.117 に答える