我正在开发一个我想要平滑显示的Windows UWP Javascript游戏项目,所以我使用requestAnimationFrame()来处理渲染。
然而,我回来的时间间隔并不一致:
{
document.grabFrame = function(timestamp) {
logTimestamp(timestamp);
requestAnimationFrame(document.grabFrame, 0);
...do rendering...
}
requestAnimationFrame(document.grabFrame, 0);
}
(记录在本地C中)
void logTimestamp(const double timestamp)
{
static double lastFrameTimestamp = 0.0f;
Log("FrameStart: %.2lf ms : since last frame Start, timestamp - lastFrameTimestamp);
lastFrameTimestamp = timestamp;
}
我有一台60 FPS显示器,我希望每次的时间戳值约为16.66毫秒。然而,他们非常不一致:
FrameStart: 16.30 ms
FrameStart: 16.02 ms
FrameStart: 17.66 ms
FrameStart: 16.17 ms
FrameStart: 15.92 ms
FrameStart: 16.36 ms
FrameStart: 17.26 ms
FrameStart: 16.27 ms
FrameStart: 16.73 ms
FrameStart: 17.53 ms
FrameStart: 16.77 ms
FrameStart: 16.54 ms
FrameStart: 17.68 ms
FrameStart: 15.98 ms
FrameStart: 16.26 ms
FrameStart: 16.10 ms
FrameStart: 16.63 ms
FrameStart: 18.16 ms
FrameStart: 15.98 ms
FrameStart: 16.35 ms
FrameStart: 16.81 ms
FrameStart: 17.17 ms
FrameStart: 18.46 ms
FrameStart: 14.58 ms
FrameStart: 17.08 ms
FrameStart: 17.12 ms
FrameStart: 15.85 ms
FrameStart: 23.19 ms
FrameStart: 14.38 ms
FrameStart: 13.27 ms
FrameStart: 15.73 ms
FrameStart: 15.57 ms
FrameStart: 16.79 ms
FrameStart: 14.64 ms
FrameStart: 18.11 ms
FrameStart: 17.45 ms
FrameStart: 16.11 ms
FrameStart: 18.61 ms
现在,它们的平均值大约为16.66毫秒,但是那里有13-23米的狂野变化。 我误解了吗?我是否有一个不经常更新的奇怪显示器?这是一个浏览器错误吗? 谁能解释一下发生了什么?