FPS游戏ping实现

时间:2012-02-07 14:34:25

标签: c++ connection ping frame-rate gettickcount

我正在制作FPS(第一人称射击游戏)游戏,我想在游戏中显示玩家的ping(连接延迟)。但是这样做的最佳方法是什么?首先我想使用GetTickCount64,但Get Tick Count不准确:

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

我有一个想法是使用time.h来查看1秒内有多少Tick Ticknts。但我认为这不是最佳解决方案。

有人可以帮我吗?

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

2 个答案:

答案 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很受欢迎。

相关问题