ゲームループをできるだけ速く実行することは許可されていますか?現在、希望のfpsを設定できるため、ゲームの出荷先のすべてのデバイスで一定のfpsを使用できます。しかし、より高速なモバイルデバイスでは、より滑らかなグラフィックスを使用したほうがよいでしょう。フレームに依存しない更新を確認しました。フレームに依存しない更新を使用する場合、(目的のfpsを達成するために)しばらく一時停止する必要はなく、ゲームスレッドで更新とレンダリングに時間がかかる場合は、更新してレンダリングしない必要はありませんか?片付けてください。
3 に答える
私の経験では (これは私だけではありません)、一般的には悪い考えです。
- バグのテスト/特定は非常に困難です。
- 特定の事柄でフレーム時間を考慮に入れるのを忘れるでしょう。また、ゲームが通常かなり均一なフレームレートで実行され、時折ドロップ/スパイクが発生する場合、これらの問題を見つけるのに長い時間がかかります。ただし、テストデバイスよりも極端に高速/低速なデバイスを使用している人には、それらは非常に明白です。
- 浮動小数点エラーなどを含む、あらゆる種類の見つけにくいバグに身を任せます。エラーは固定 FPS ループで発生する可能性がありますが、正確に 3124 ナノ秒かかるフレームだけでなく、すべてのフレームで発生します。
- 更新間隔が固定されていない場合、リアルタイムの物理シミュレーションは非常に困難です。これで私を信頼してください!これは、物理更新に一定の時間ステップを使用することで回避できますが、これには独自のリスクが伴います。
- そうでなければ定数になる可能性のあるものを計算する必要があります。ケースバイケースでは非常に小さいですが、合計することができます。(これは、作成しているゲームの性質によって異なります)。
- CPU を常に 100% で実行している場合、ユーザーのバッテリーをより速く消費します。
私のアドバイスは、適切な固定フレームレートでロジックを実行し、できるだけ頻繁にレンダリングすることですが、ロジックを更新するより頻繁にレンダリングしても意味がありません。「暇な」時間があれば、ただ寝てください。ユーザーのバッテリーはあなたに感謝し、ユーザーはあなたのゲームをプレイしているときに携帯電話が熱くなる理由を不思議に思うことはありません!
スムーズに感じるための鍵は、ロジック更新の固定フレームレートが十分に高いことを確認することです. 実際には、特定のフレームレートを超えると、ユーザーは違いに気づきません。十分な高さはゲームの性質によって異なりますが、アクション ゲームでは 30 fps が一般的です。ユーザーが移動/変化を見ることができる速度が速ければ速いほど、固定フレームレートは高速である必要があります。たとえば、ファーストパーソン シューティング ゲームは常に、戦略ゲームよりも高いフレームレートを必要とします。
利用できる別のオプションは、論理的な「スナップショット」を作成し、レンダリング時にそれらの間を補間することです。これは、こちらで説明されているように、マルチプレイヤー ゲームをスムーズにするために使用される一般的な手法です。また、ロジックを更新するよりも頻繁にレンダリングする有効なオプションにもなります!
編集:うまくいけば、いくつかのことを明確にしました。
フレームレートに人為的な制限を絶対に課すべきではありません。できるだけ速く走ります。各フレームにかかる時間を (デルタを使用して) 追跡し、それを使用して時間に対する次のフレームの状態を正確に計算できます。
それは正しいです。できるだけ速くレンダリングすると、基本的に現在の時間に比例する値に基づいて各オブジェクトが更新されます。
したがって、回転する立方体がある場合、フレームごとに X 度ではなく、1 秒あたり X 度回転します。これにより、貧弱なマシンでは中間フレームがスキップされ、立方体の回転が不安定になります。しかし、良いマシンでは、滑らかな回転が見られます。