0

我正在尝试使用“滴答时间”来跟踪我的 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)上遇到了这种情况。

4

1 回答 1

1

这看起来像一个错误。InputEvent 返回一个 PP_TimeTicks。时间刻度应该具有您通过 Core::GetTimeTicks() 看到的行为。

但是输入事件正在返回您的挂钟时间。这实际上是正确的,因为辣椒输入事件应该匹配 DOM 事件,并且 DOM 输入事件被指定为自 1970 年以来的时间(挂钟时间)。

行为是正确的,但 GetTimeStamp 的返回类型应该是 PP_Time 。我会归档这个。

于 2014-03-27T23:26:07.147 回答