回答:
もちろん、これは主観的なものですが、速度よりも一貫性がゲームプレイにとってはるかに重要だと思います。
基本的に、ゲームが一貫していて、プレイするのが楽しく、不快でない場合、プレイヤーは遅いフレームレートを我慢します。しかし、ゲームが完全に揺るがしても、それが破裂して人々に頭痛の種を与えたり、物事をコントロールできなくなったりすると、イライラしてプレイを停止します。
そう...
設計と開発全体で一貫したFPSに焦点を当てます。
ゲームがほぼ終了し、バグ修正などを気にせずにパフォーマンスを向上させる時間がある場合は、より高速な(ただし一貫性のある)FPSに焦点を当てます。
パフォーマンスを向上させる1つの方法は、ポーリングではなく、コールバック/デリゲート/割り込み(言語/プラットフォームによって異なります)を使用することです。
あなたがすべきこと:
そうすれば、フレームレートが下がっても入力ラグは発生せず(私はあなたを見ているだけで、原因2)、フレームレートが高くなりすぎた場合(90年代のゲームを考えてみてください)、ゲームはプレイ不能になりません。
ここに私がそれをする方法があります:
s_PhysicsCurrent = GetTickCount();
float delta = (float)(s_PhysicsCurrent - s_PhysicsStart);
s_PhysicsStart = s_PhysicsCurrent;
s_PhysicsTime += delta;
while (s_PhysicsTime > ONEFRAME)
{
// Update
Game::Tick(ONEFRAME);
// Clear input
Keyboard::Clear();
Mouse::Clear();
s_PhysicsTime -= ONEFRAME;
}
s_Window->Clear();
Game::Render();
s_Window->Swap();
基本的に、ロジックを実行するフレームの「スタック」を収集し、それらの間を完全に補間できます。
少なくとも2つの実行スレッドがあり、レンダリングは独自のスレッドで行われているようです。その場合は、実際には2つのフレームレートを考慮する必要があります。両方をできるだけ速くしたいでしょう。ただし、作成するゲームの種類によっても異なります。
フレームレートの小さな低下が対戦相手にアドバンテージを与える可能性がある、一人称シューティングゲームを構築していますか?その場合、平均fpsが十分に高いことを確認する必要がありますが、最悪の場合のフレーム時間も心配する必要があります。ボードゲームを構築していますか?その場合、時々起こるフレーム時間の急増は、ユーザーエクスペリエンスを停止させることにはなりません。
私自身のゲームでは、私のプロセスは通常次のようなものです:
ほとんどの場合30 fpsで、10秒ごとに200ミリ秒に急上昇すると、問題が発生します。ただし、平均15 fpsの場合は、最初に平均fpsを上げてください。
したがって、短い答えはおそらく、最初にユーザーエクスペリエンスに最大の改善をもたらすものを最適化することです。
FPSを一定の数にロックすると、次のことが可能になります。
大きいほど常に良いですが、:
一貫性のないフレームレートは、乗り物酔いにつながる可能性があります。
(彼のフレームレートが20から60の間で10秒間ジャンプしたとき、内部テスターに投げられました。)
ティアリングを防止したい場合は、FPSをモニターのリフレッシュレート以下にロックするV-syncを使用する必要があります(高くすると、表示されなくなるため、無駄になります)。
答えは1つだけです。つまり、開発中は常に高い状態を保ち、ダウンが最も低いスパイクまで下がると、ゲームは安定した流れに陥ります。私はコードに座っています。コードドラゴンの秘密の方法であるため、コードはそのまま残ります。/ Eyhe