私の質問は、openglのゲームループ設計についてです。
ゲームループは3つの主要なステップで吐き出すことができると私は信じています
- 入力を受け入れる-ユーザーが画面やシステムアラートなどをクリックした場合に発生する可能性があります。
- ロジックを実行する
- ビューを更新
簡単にするために、ステップ2と3に焦点を当てましょう。
並行して実行したり、1つのステップに混ぜたりするのは間違っていると思います。例を挙げます。
Latsは、ウォーゲームを作成していて、画面上で戦う100人の兵士を描画する必要があると言います。ロジックは、位置を更新し、背景領域を更新してから、結果を描画する必要があります。別の兵士の位置を更新する前に、1人の兵士の描画を開始することはできません。
したがって、この簡単な手順によれば、手順2と3を何らかの方法で同期する必要があり、手順2は手順3の前に実行する必要があることは明らかです。
では、複数のスレッドと複数のプロセスでゲームループを実行する方法を教えてください。opneglはマルチコアを使用していますか?どのように?
編集:マルチスレッドを使用する1つの方法は、ゲームロジックを事前に計算すること、つまりベクトルを使用することです。ただし、ベクトルには2つの大きな欠点があり、使用することはほとんどお勧めできません。
- ベクトルを変更したくない場合もあるので、多くの計算を行い、それらを使用しません。
- ほとんどの場合、ゲームループで60 + FPS witch平均16ミリ秒に到達しようとしています。スレッドの切り替えには何らかの同期が必要です。私が見たところ、単純なHandler.post()でさえ、同期はパフォーマンスに悪影響を及ぼします。 android(他のスレッドで実行するためにキューにタスクを追加するだけ)では、最大3ミリ秒(フレームレート時間の18%)かかる場合があるため、計算にそれより長くかかる場合を除いて、実行しないでください。今のところ、それほど時間がかかるものは見つかりませんでした。