2

現在、FPS(ファーストパーソンシューティング)ゲームに取り組んでいます。ゲーム内のプレーヤーのping(接続遅延)を表示したいと思います。しかし、これを行うための最良の方法は何ですか?最初はGetTickCount64を使用することを考えましたが、GetTickCountは正確ではありません。

「GetTickCount64関数の解像度は、システムタイマーの解像度に制限されており、通常は10ミリ秒から16ミリ秒の範囲です。」

time.hを使用して、1秒間にティックカウントがいくつあるかを調べることを考えました。しかし、それは最善の解決策ではないと思います。

誰かがこれを手伝ってくれますか?

編集:私はWindowsゲームを作っています。(私がこれを書き留めるのを忘れたことに言及してくれたunwindとLefterisに感謝します)

4

2 に答える 2

6

Windows ソリューションを探している場合は、QueryPerformanceCounterを試してください。

次のコードは、BobJoy1 によって投稿されました。次のように、2 つの呼び出しの差を CPU 周波数で割る必要があります。

LARGE_INTEGER start;
::QueryPerformanceCounter(&start);
// do something
LARGE_INTEGER stop;
::QueryPerformanceCounter(&stop);

LARGE_INTEGER proc_freq;
::QueryPerformanceFrequency(&proc_freq);
double frequency = proc_freq.QuadPart;
double seconds_elapsed = ((stop.QuadPart - start.QuadPart) / frequency);
于 2012-02-07T14:52:41.567 に答える
0

最善の方法は、サーバー ホストに対して単純に ICMP エコーを実行することだと思います。そうすれば、表示される ping は、プレイヤーが自分で測定できるものと一致します。これは素晴らしいことです。また、私の経験では、ping のようなものにはミリ秒単位の解像度しか期待できません。Linuxの方が優れていることは知っていますが、プラットフォームについては触れておらず、ゲームではWindowsがかなり人気があります.

于 2012-02-07T14:48:24.770 に答える