1

プログラム/ゲームのフレームレートを VSync と同様の方法で外部から制限する方法を見つけようとしていますが、(画面のリフレッシュ レートではなく) 指定された数値に制限します。私が目指しているものの完璧な例は、フレームレートが記録レートに制限されているビデオを記録するときの FRAPS で見ることができます。その理由は、フレームレートの大きな変化によって引き起こされる「画面の遅れ」を止めるためにグラフィカルに集中的ではないペースの速いゲームのためですが、奇妙なことに、キーボード/マウス間のレイテンシが増加するため、VSync は適していません (両方とも高いレートでポーリングされるため、ハードウェアの問題ではありません)。

C/++ でのアドバイスを理想的に探していますが、正直なところ、どこから始めればよいかわかりません。

4

3 に答える 3

2

あなたが何を求めているのか理解できているかどうかわかりません。

FPS ゲームの動作方法は、画面をペイントし、キーボード/マウス/その他の処理とゲーム ロジックを実行してから、再度画面をペイントするというものです。タイトなループで。

画面の描画が速くなり (これは主にグラフィックス アダプターの問題です)、ロジックのビジーワークの処理が速くなればなるほど、フレーム レートは速くなります。それが文字通り起こっていることのすべてだからです。

フレーム レートによって処理が遅くなるわけではなく、その逆です。スクリーン ペイントの間に一時停止を入れると、CPU の動作が少し遅くなりますが、それ以外のことはできません。


別の言い方をすれば、フレーム レートは効果であり、原因ではありません。お使いの PC は、他にやるべきことがないため、1 ミリ秒も無駄にせずに画面の更新を行っています。

遅延が見られる場合、それは PC が大量のメモリ移動、ディスクの読み取り、画面計算 (1000 人の敵が飛んでくると考えてください)、またはインターネットの遅延による窒息で本当に行き詰まっていることを示しています。画面の再描画による遅延は発生しません。


アップデート:

あなたの言っていることは信じがたいですが、私はここでの回答者です。本当にフレーム レートを下げたい場合は、CPU に何らかの処理をさせてください。Linux カーネル コンパイルを実行します。ちょっと待って、gamez = Windowz。Calc.exe を起動し、科学モードで大きな数の階乗を求めます。何が起こるか見てください。フレーム レートが下がらない場合は、2 つまたは 3 つの Calc のインスタンスを並行して実行します。

于 2009-12-10T23:44:07.253 に答える
1

スレッド API を使用して、ゲームのスレッドを数ミリ秒中断してから再開します。CodeProject に関するこの記事 (C++)このスタック (ただし C#)では、これについて詳しく説明しています。

于 2009-12-11T01:34:54.543 に答える
0

kcapture (オープン ソース) は、デモ用にこれを行います。目的に合わせて変更できるかどうかはわかりません。これはプロキシ ビデオ ドライバを作成しますが、おそらくハードコアすぎて処理できません。

于 2009-12-10T23:49:12.207 に答える