FPS游戏ping实现

FPS game ping implementation

本文关键字:实现 ping 游戏 FPS      更新时间:2023-10-16

我现在正在开发一款FPS(第一人称射击游戏)游戏,我想在游戏中显示玩家的ping(连接延迟)。但是,最好的方法是什么呢?起初我想使用GetTickCount64,但GetTickCount并不精确:

GetTickCount64函数的分辨率仅限于系统计时器的分辨率,通常在10毫秒到16毫秒的范围内

我有一个主意,用time.h来看看一秒钟内有多少个滴答计数。但我认为这不是最好的解决办法。

有人能帮我吗?

编辑:我正在制作一款Windows游戏。(感谢放松和Lefteris提到我忘了记下这一点)

如果您正在寻找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);

我认为最好的方法是简单地对服务器主机执行ICMP回显。这样,你显示的ping将与玩家自己测量的内容相匹配,这很好。此外,根据我的经验,你应该只期望像ping这样的东西有毫秒的分辨率。我知道Linux做得更好,但你没有提到一个平台,对于游戏来说,Windows非常受欢迎。