【发布时间】:2012-08-02 22:11:55
【问题描述】:
我已将我的游戏循环简化为一个在屏幕上移动的框,Click Here。由于某种原因,盒子似乎移动不顺畅。我做了一个video of it here。
游戏循环是这样调用的:
var game = function( ) {
var now = Date.now( );
var delta = now - then;
update( delta / 1000 );
draw( );
then = now;
};
setInterval( game, 1000 / 50 );
我尝试将draw 调用与主游戏循环分开并将它们放入requestAnimationFrame,但问题仍然存在。我看过一堆似乎运行顺利的教程。我什至尝试过使用fixed time-step game loop,但这只会让我的游戏运行得快得无法控制。
我如何改进上述逻辑,也许利用requestAnimationFrame 并为update 调用维护deltaTime。
【问题讨论】:
-
我完全没有看到,它也一直在说
59。那是fps吗? -
嗯,是的,59 是我尝试显示每秒更新次数的尝试。在我的 Mac 上的 Safari 和 Chrome 中,我看到桨和球向前跳了一下,而不是平稳地移动。我想我应该在其他一些计算机上检查它。
-
如果我仔细看的话,我猜球有点生涩......这是因为在某些帧中,球一次移动超过 1px。
-
正确。有没有办法纠正这种行为?我认为通过基于
deltaTime(更新周期之间的时间差异)进行更新可以使事情顺利进行。 -
我似乎没有注意到我的计算机上的这种行为,但这很可能是因为 FPS 或多或少是恒定的。但是,这很可能是您绘制太多的事实的副产品,制作一个您不更新的单独画布,上面有背景,或者让自己成为一个只绘制脏项目的系统(已经改变位置的东西/缩放/旋转/颜色等)
标签: javascript animation html5-canvas game-physics