2

我目前正在开发 FPS(第一人称射击)游戏,我想在游戏中显示玩家的 ping(连接延迟)。但是最好的方法是什么?首先我想使用 GetTickCount64,但 Get Tick Count 并不精确:

“GetTickCount64 函数的分辨率受限于系统定时器的分辨率,通常在 10 毫秒到 16 毫秒的范围内。”

我有一个想法使用 time.h 来查看 1 秒内有多少滴答计数。但我认为这不是最好的解决方案。

有人可以帮我弄这个吗?

编辑:我正在制作一个 Windows 游戏。(感谢 unwind 和 Lefteris 提到我忘了记下来)

4

2 回答 2

6

如果您正在寻找 Windows 解决方案,请尝试QueryPerformanceCounter

BobJoy1 在此处发布了以下代码。您必须将两个调用之间的差异除以 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 回答