どうすればスペースシムに勢いを盛り込むことができますか?


8

私は今、単純な2D物理エンジンの作成に取り組んでおり、勢いを宇宙船の動きに組み込む方法を理解するのにいくつかの問題に直面しています。

特定の方向に特定の速度で移動している場合、現在、船の位置を簡単に更新できます(位置+ =方向*速度)。しかし、船がまったく回転し、(船が向いている新しい角度に基づいて)方向を再計算し、その方向に加速する場合、船が移動する「線」を変更するために勢いをどのように考慮することができますか?現在、船は瞬間的に方向を変え、推力ボタンを押すと現在の速度でその新しい方向に進みます。船自体にある程度の質量があるような印象を与えるために、より緩やかな旋回動作にしたい。

このトピックに関する素晴らしい投稿がすでにある場合は申し訳ありませんが、検索で何も見つかりませんでした。さらに情報が必要な場合はお知らせください。質量*速度をゲームループの更新にスローする方法を誰かに簡単に教えてもらえれば幸いです。


モーションのプログラミング方法を詳しく検討している場合は、無料ゲームのトランセンデンスを見てください。これは、それを使用する別の2Dスペースシューティングゲームです。多分あなたはそのスクリプトを見たり、開発者にどうやってそれをしたのか尋ねたりすることができます
Mastersteviekun

回答:


7

ベクトルとして位置と方向、スカラーとして速度を持っているようですか?

その場合は、Velocityをベクトルに変更して、次のようにします。

Force = Direction * Power
Acceleration = Force / Mass
Velocity += Acceleration * ElapsedTime
Position += Velocity * ElapsedTime

方向は、船の方位を示す単位長のベクトルです。パワーは追加したい推力の量です(加速が不要な場合はゼロ)ElapsedTimeは、フレームレートが変化している場合でもスムーズな動きを維持するためのゲームのUpdate呼び出し間の時間です

それについてもっと知りたい場合は、オイラー統合を調べることができます


1
うん、次のステップは、ニュートンの法則F = m * aをモデル化することです。したがって、「パワー」定数を使用して加速度を取得する代わりに、Acceleration = Force / massを使用します。したがって、推力を適用するときは、力ベクトルとして適用します。これを行うと、すべての力ベクトルを加算して対応する加速度を計算することにより、宇宙船に他の力を簡単に適用できます。また、別の変数としてMassを操作できることも意味します。
TerryB

Terryは正解です。元の投稿に組み込むことを忘れていました。
Bell氏、

Bell / Terry氏に感謝します。上記の両方の方程式は、プログラムでこれを行うのに役立ちました。フロートをあちこちに使用しようとすると、これがどのように機能するかを理解するのに多くの問題がありました。質量以外のすべてをベクトルに切り替えた後(上記のレフティウムのおかげで)、ようやく動作させることができました。
Josh Petite

8

速度を直接操作する代わりに、別の変数を追加します。加速度は、速度を徐々に滑らかに変化させます。

古典物理学から(ニュートンの運動の法則):

a =  F/m  // a Force will result in a smaller acceleration on objects with more mass
v += a    // acceleration is the rate of change in velocity
p += v    // velocity is the rate of change in position    

どこ:

a = acceleration, v = velocity, p = position
F = force, m = mass

(mが唯一のスカラー値であることに注意してください。F、a、v、およびpはすべて2Dまたは3Dベクトルです)

また、実際には2つの方向があります。

  1. 船が向いている方向。エンジンからの力がこのベクトルに沿って適用されます。
  2. 船が実際に動いている方向(運動量のため)。これは速度ベクトルvです。

StackOverflow:2D Spaceship Movement mathに関する質問に回答しました。その答えにはいくつかのサンプルコードがあります。


この方法を使用したティックベースのシミュレーションでは、誤った結果が得られることに注意してください。基本的な公式は、物理学の継続的な世界では正確ですが、正確な結果を得るには数値積分を行う必要があります。詳細はこちら:gafferongames.com/game-physics/integration-basics
Tetrad

ついにこれが機能しました どうもありがとうございました。このup入力イベントを、更新(および時間の使用法を組み込む)と共に賢く解析する方法を理解するのにはしばらく時間がかかりました。
Josh Petite
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.