これの本当のトリックは、高校レベルの科学です。あなたがすべきだった。簡単にグーグルで検索しなかった場合は、すぐに始められます。「初心者」の考え方を避ける方法を説明するには、月着陸船の例を取り上げます。
[change in position] = [velocity] * [time passed]
これらの変数を追跡する必要があることが明らかになったことを読んだら:
float x, y; // Your X and Y co-ordinates.
float vx, vy; // Your X and Y velocity.
float deltaTime; // Change in time.
次に、各フレームの位置に速度を適用します。
// Change X by the velocity multiplied by the time.
x = x + vx * deltaTime;
y = y + vy * deltaTime;
次に、重力を追加できるように、各フレームの速度を変更します。まったく同じソースによると[change in velocity] = [acceleration] * [time passed]
。したがって、まったく同じ原則を適用できます。
const float gravity = 9.8f; // The gravity of the earth.
// Add gravity to the vertical velocity.
vy = vy + gravity * deltaTime;
// Change X by the velocity multiplied by the time.
x = x + vx * deltaTime;
y = y + vy * deltaTime;
ここで、プレイヤーが宇宙船を制御する方法が必要です。基本的な物理学についての詳細を読むと、運動は力の結果であることがわかります。ソースを見つけることはできませんが[change in acceleration] = ([force] / [mass]) * time
(覚えている限り)。そのため、プレイヤーがキーを押すfx
と、fy
変数と変数を何かに設定し、更新中に方程式を適用するだけです。
最終的には、ゲーム内のオブジェクトの周囲の物理学について考える必要があります。そして、オブジェクトを思い通りに動かそうとする代わりに、方程式を調べます。
将来注:これは間違いなく(これはオイラーの統合と呼ばれ、低フレームレートでいくつかの奇妙な状況につながることができます)物理学を行うための最善の方法ではないことを忘れないでください-あなたがに見てする必要が物事の他の方法(その記事はかなり持っています素朴な基礎についても素敵な記事)。ただし、今のところオイラーインテグレーションに固執してください。これは、1つ少ないことを学ぼうとしていることを意味します。
どのゲームが正しい考え方で考える方法を教えてくれますか?
正しく、正しい考え方で物事を行ったことをどのようにテストしますか?Sleep(10 milliseconds)
ゲームループにを挿入すると、すべてが移動し、フルフレームレートと同じように反応するはずです。
最後に、2Dゲームを機能させるための十分な経験を積むまで、3D(およびクォータニオンとマトリックスの強化)を避けてください。多くのゲーム開発者は、QuaternionsやMatricesが実際にどのように機能するかを実際には知らないが、それらを使用する方法を知っているだけであると言いたいと思います。(または、2Dゲームはとても楽しく、成功)。基本レベルでこれを行うために、線形代数などを実際に知る必要はありません(しかし、本当に役立つので、できれば夜のクラスに行ってください)。
最終的なボーナス:美術の先生がいつも言っていたことの1つは、「あなたが見ていると思うものを描かないで、見ているものを描く」ことです。同じことは、ここに適用され、「あなたは何をモデル化していないと思います(たまたまobject.position++
)、モデル何が起こるか( `object.position + =速度*時間)」 -少なくとも合理的な範囲に(あなたは完全に正確なシステムをモデル化しますが、メイクされていません良い模造品です)。