我想用重力创建一个简单的动画(http://jsfiddle.net/2pcr9/4/在 chrome 和 firefox 中测试)。我正在用画布在 Javascript 中做到这一点。使用 (:46) 以可变时间步长计算重力和速度:
this.realDelta = (now - this.prevTime) / 1000;
this.realTime += this.realDelta;
每个球都有计算速度和位置的代码(:148):
this.vy += this.gravity * time.delta;
this.x += this.vx * time.delta;
this.y += this.vy * time.delta;
现在,当您查看窗口时,此原型可以正常工作。
但是如果你隐藏当前窗口(切换到浏览器的另一个选项卡),window.requestAnimationFrame 就会停止。如果您等待 5 秒,然后打开窗口,window.requestAnimationFrame 将恢复。问题是 realDelta 现在是 5 秒,并且速度太大。
我可以添加一个检查以不允许 realDelta 大于一秒(:46):
this.realDelta = (now - this.prevTime) / 1000;
if (this.realDelta > 1) {
this.realDelta = 1;
}
this.realTime += this.realDelta;
但这并不能真正解决问题。
现在我不明白如何真正解决这个问题。我是否应该检查窗口是否隐藏并暂停计时器(并在窗口再次可见时恢复计时器)。还是我的速度计算有误?其他 html5 游戏如何解决“dt”过大的问题?
谢谢