【发布时间】:2011-07-29 15:43:11
【问题描述】:
JavaScript 是否提供高分辨率计时器?
我已经从零开始编写了一些游戏引擎,一些使用 C 语言,一些使用 Java,还有一些使用 Flash。在动画和交互式图形方面,我总是遵循相同的基本模型。使用以下设计创建一个基本类/结构:
void init() { /* Called once, preload essential resources here. */ }
void update(double time) { /* Updates game/animation state using high resolution time. */ }
void render(double time) { /* Updates screen graphics using high resolution time. */ }
void run()
{
double time;
init();
while (!done)
{
time = queryTime();
update(time);
render(time);
}
}
时间对于平滑动画和游戏状态计算非常重要。在本机代码 Windows 中,我使用QueryPerformanceCounter() 和QueryPerformanceFrequency() 在每个游戏循环中执行queryTime() 的角色,并通过时间来更新/渲染。在 Java 中,我使用 System.nanoTime()。
JavaScript 中的等价物是什么?也就是说,像queryTime() 这样的一些函数会返回一个高精度(亚毫秒)的时间值。据我所知,在 JavaScript 中可以获得的最佳准确度约为 15 毫秒……这对于动画来说太可怕了。
【问题讨论】:
-
JS 中的繁忙循环会阻塞任何交互,因为只有一个线程。查看developer.mozilla.org/en/DOM/window.mozRequestAnimationFrame,但目前仅适用于 chrome 和 FF。
-
胡安,感谢您的回复。请参阅下面我对 katspaugh 的回复。
标签: javascript animation