我正在尝试使用“滴答时间”来跟踪我的 PNaCl 游戏中的时间,因为游戏时间不应受到用户调整系统时钟的影响。
我想同时使用pp::Core::GetTimeTicks()
并pp::InputEvent::GetTimeStamp()
运行我的游戏模拟。逻辑如下:当输入事件发生时,运行模拟直到该pp::InputEvent::GetTimeStamp()
事件的游戏时间匹配。当渲染完成回调发生时,运行模拟直到游戏时间匹配pp::Core::GetTimeTicks()
。
开始时效果很好,并且据我了解文档似乎支持此用例,来自pp::Core::GetTimeTicks()
:
浏览器在将一些事件时间传递给模块时使用此时钟(例如,使用 PP_InputEvent::time_stamp_seconds 字段)。
但是,当我让计算机进入睡眠状态并再次打开它时,这两个时钟似乎与计算机睡眠的时间不同步。pp::Core::GetTimeTicks()
似乎在系统休眠时停止运行,而pp::InputEvent::GetTimeStamp()
似乎一直在运行。输入事件的时间戳比核心时钟提前了系统休眠的时间量。
这会破坏使用两个时钟来计时。一种解决方法是在运行模拟以响应输入事件时使用核心时钟,但这可能会导致按键和屏幕上的操作之间的延迟更高。另一种解决方法是根本不运行模拟以响应输入事件。尽管如此,我还是想弄清楚这个难题。
这是实现中的错误吗?是不是文档中的一个错误,似乎说这些时间应该是同步的?还是我读错了文档?
我在适用于 Linux 的 Chrome 33.0.1750.152(官方版本 256984)上遇到了这种情况。