メインゲームループを作成するにはどうすればよいですか?[閉まっている]


130

メインゲームループを作成するにはどうすればよいですか?ゲームループで行うべきことと、ゲームループですべきでないことは何ですか?

私はそれらをたくさん書きましたが、ゲームループを実際に読んだことがありません。私はそれらをかなり改善できると確信していますが、どうすればいいかわかりません。


4
邪悪な答え:誰かのエンジンを使用してこのループを作成するのはどうですか?:)
user712092

ユーザーに実行したいフレームの合計数を尋ね、forループを使用してバッファーのn倍の量にできます。
ウグルギュミュシュハン

回答:


121

メインゲームループは、3つの主要なタスクを処理します。

  1. ユーザー入力を取得する
  2. ゲームの状態を更新する
  3. ゲームを描く

単純なゲームループは、これら3つのタスクを1つのwhileループに集中させるだけです。これにはいくつかの望ましくない結果があります。

  1. ゲームは異なるコンピューターで異なる速度で実行されます。
  2. CPU(不必要な場合もあります)が100%の使用率で固定されています。
  3. 「ゲームの状態」/メニューが見つからないか、ゲームコードと混在しています。
  4. メインゲームループは非常に長く、維持が困難です。
  5. コードを他のプラットフォームに拡張/移植することは困難です。

高度なゲームループは、上記の問題に対処します。役に立つ記事を次に示します。

優れたゲームループの例については、Allegro skaterデモゲームをご覧ください。

多くの場合、ゲームループはほとんどのゲームで同じタイプの作業を行うため、汎用的なゲームフレームワークを作成する方法を考えています。ゲームループの実装を1つ作成し、ゲーム間で共有することをお勧めします。新しいゲームを作成するときの作業を節約し、共有ゲームループの改善をすべてのゲームで共有できます(たとえば、FPSカウンターや画面キャプチャ機能の追加)。


1
うん、疑いがあるように、私は間違いなく改善を行うことができます。良い読み取り。また、コードを投稿してくれてありがとう。このようなもので実際のゲームコードを見るのは素晴らしいことです。
hokiecsgrad

1
CPU 100%の使用率スタックする必要があります(少なくとも2つのコアがある場合は50%程度)。考えてみてください。そこに座って「ああ、でもCPUを全部使いたくない」と言ったら、どのようにして最先端の物理学、キラーグラフィックスを手に入れるのでしょうか。はい、可能な場合はCPUを100%使用する必要があります(ただし、今日のコンピューターではマルチスレッドを使用するため、4コアの100%を常に使用することは非常に困難です)。実行中のマシンを最大限に活用してください。
ボボボボ

5
追加を許可: デスクトッププログラムの場合。ポータブルデバイスでは、より多くのバッテリーを消費するため、100%の使用が心配されます。
ボボボボ

1
@ user6003859:リンクを修正しました。
レフティウム

1
別の便利なリンク:gameprogrammingpatterns.com/game-loop.html
brita_

51

堅牢なフレームレートの独立性に関するGlenn Fiedlerの記事、「Fix Your Timestep!」をお勧めします

(手元のトピックに関連性は低いが、シリーズの他の記事も非常に優れている。彼のサイトにあるすべてのものもそうだ!)


これらは間違いなく本当に良い記事です。投稿していただきありがとうございます!
hokiecsgrad

1
次に、堅牢なフレームレートに依存しない実装を推奨します。ゲーム内のすべては、定期的に更新するデルタ値として実装する必要があります。そして、それは必ずしも次のフレームに進むと同時に行われるべきではありません。実際、フレームをスキップした場合、2xのデルタを使用して更新メソッドを単純に呼び出したくないでしょう。同じデルタを使用して、更新を2回呼び出す方が一貫性があります。フレームレートと更新サイクルの問題を学ぶのに時間をかけてください。後で時間を節約できます。
デニスマンシー

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