最良の答えは、次のとおりです。
どちらも制限する必要はありません
更新:更新が上限にバインドされていない場合、ゲームロジックは、実行されるマシンに応じてゲームの実行が速くなったり遅くなったりしないように、デルタ時間に依存する必要があります。これは多くのゲームで使用される非常に一般的なアプローチですが、それだけではありません。
レンダリング:レンダリングが上限にバインドされていない場合、フレームバッファーが不完全または誤った状態で表示され、ティアリングアーティファクトが発生する可能性があります。これが、多くのゲームが垂直同期(v-sync)を採用している理由です
あなたは両方を制限するかもしれません
更新:一部のゲームは、そのゲームプレイシステムの一部またはすべてに固定タイムステップを使用します。このアプローチは、説明したとおりに機能します。1秒間の更新数は上限に制限されており、一流のマシンで高速に動作しないようになっています。これにより、デルタタイミングが不要になります。一部のアプリケーションは、タイムステップが固定されている場合や、デルタタイミングの場合に適しています。どのアプローチを選択するかは、完全に達成しようとしていることに完全に依存します。オンラインブックGameProgrammingPatternsには、両方のアーキテクチャに関連するゲームループに特化した章があります。
レンダリング:前述のティアリングの問題を回避するために、1秒あたりのフレーム数を上限に設定する必要があります。ただし、アプリケーションは、CPUロックを使用して手動でこれを試行しないでください。代わりに、v-syncを有効にして、下にあるハードウェアをモニターのリフレッシュレートと同期させます。そうすることで、ゲームは、現在一般的な60Hzよりもはるかに高い周波数で動作する可能性のある将来のモニターと前方互換性があります。多くのゲーマー、特にベンチマークを行うゲーマーは、可能な限り最高のフレームレートを実現するために、v-syncなしで実行することを好むことにも注意する必要があります。したがって、実行時に機能を有効または無効にできるようにするのが賢明です。
制限してはいけないこと
ゲームがユーザー入力にポーリングベースのアプローチを使用している場合、たとえばgetInput()
、更新ステップ中に一種のコントローラーを呼び出してコントローラーの状態を更新する場合、制限がない場合はこれが適しています。または制限されている場合は、非常に高い上限に設定します。ユーザー入力をクエリして操作する頻度が高ければ高いほど、ゲームの反応がよくなり、スムーズになります。最近聞いたいわゆる60HzゲームはAIとすべての世界の状態をその速度で更新していません。高速にレンダリングされないものもありますが、コントローラーの入力を少なくとも毎秒60回クエリし、それに応じてプレーヤーのアバターを更新します。これは、ペースの速いアクションゲームにのみ関連していると考えられます。