我已经在 Flash/Actionscript/Starling 中实现了一个游戏循环,我想把它扔给你看看这是否是一个有效的实现。我想有一个可变的时间步长方法。
private var _deltaTime:Number = 0;
private var _lastTime:Number = 0;
private var _speed = 1000 / 40;
private function onEnterFrame() {
var now = new Date().getTime();
var delta = now - _lastTime;
_deltaTime += delta - _speed;
_lastTime = now;
//skip if frame rate to fast
if (_deltaTime <= -_speed) {
_deltaTime += _speed;
return;
}
update();
}
private function update() {
updateGameState();
if (_deltaTime >= _speed) {
_deltaTime -= _speed;
update();
}
}
到目前为止我得到的是我有一个恒定的速度(或多或少)。
我的问题是有没有更好的方法让动作看起来更流畅。
让我真正感到惊讶的是,即使你的 FPS 几乎是恒定的(60FPS),运动有时也比简单的游戏循环更颠簸但更流畅。