我正在制作FPS(第一人称射击游戏)游戏,我想在游戏中显示玩家的ping(连接延迟)。但是这样做的最佳方法是什么?首先我想使用GetTickCount64,但Get Tick Count不准确:
“GetTickCount64函数的分辨率仅限于系统计时器的分辨率,通常在10毫秒到16毫秒的范围内。”
我有一个想法是使用time.h来查看1秒内有多少Tick Ticknts。但我认为这不是最佳解决方案。
有人可以帮我吗?
编辑: 我正在制作Windows游戏。 (谢谢放松和Lefteris提到我忘了记下来了)
答案 0 :(得分: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);
答案 1 :(得分:0)
我认为最好的方法是简单地对服务器主机执行ICMP回应。这样,您显示的ping将匹配玩家可以自己测量的内容,这很不错。此外,根据我的经验,你只应该期望像ping一样的毫秒分辨率。我知道Linux做得更好,但你没有提到平台,对于游戏,Windows很受欢迎。