Actionscript 3 Actionscript 3不稳定的帧速率
我正试图在ActionScript3中开发一个游戏,但是突然而频繁的延迟会让游戏非常不舒服 目前,整个游戏只是移动一个正方形,因此没有什么繁重的计算会导致这种情况 我已经尝试使用定时器和输入帧事件。他们都很不稳定。我也尝试过不同的帧率 我能做些什么来防止这种情况Actionscript 3 Actionscript 3不稳定的帧速率,actionscript-3,optimization,lag,frame-rate,Actionscript 3,Optimization,Lag,Frame Rate,我正试图在ActionScript3中开发一个游戏,但是突然而频繁的延迟会让游戏非常不舒服 目前,整个游戏只是移动一个正方形,因此没有什么繁重的计算会导致这种情况 我已经尝试使用定时器和输入帧事件。他们都很不稳定。我也尝试过不同的帧率 我能做些什么来防止这种情况 //var timer = new Timer; //timer.addEventListener(TimerEvent.TIMER, time); //timer.start(); stage.addEventListener(Eve
//var timer = new Timer;
//timer.addEventListener(TimerEvent.TIMER, time);
//timer.start();
stage.addEventListener(Event.ENTER_FRAME, time);
function time(evt:Event):void
{
now=(getTimer());
dt = now-then;
trace(dt);
then = now;
}
给出以下输出(尝试的FPS:100):
3 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 9 11 11 9 11 11 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10297 5 14 14 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 1010 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 9 11 11 10 10 10 9 10 10 10 11 10 10 10 9 10 10 10 10 11 11 10 10 10 10 10 11 9 10 10 10 10 10 10 11 11 11 11 11 11 11 10 10 10 10 10 10 10 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 9 10 10 10 10 10 10 9 10 10 10 10 10 10 10 10 10 10 10 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 1011 9 10 10 10 10 10 10 10 10 11 9 10 10 10 10 10 10 10 10 11 9 10 11 11 11 9 10 10 10 11 11 11 11 11 10 10 11 10 11 11 10 9 11 11 15 11351542 64 3715 6 5 10 11 9 10 11 11 9 10 10 10 10 10 10 10 10 10 10 10 10 102863 65 638 15565713 6 13 12 6 1136 69 20 2512 6 533 36 57 20 34 2112 9 13 6 5 9 9 7 10 10 10 10 10
我上传了一个swf来演示问题(这里是60 FPS)。(用键移动)。正如您将体验到的,正方形在大部分时间内移动平稳,但频繁的延迟会让它感到不舒服
编辑:与大多数代码位于不同的AS文件中相比,当所有代码都在FLA时间线中时,应用程序运行起来似乎要平稳得多。有什么可能的原因吗?坚持30帧/秒
不确定以下内容是否有助于提高性能。但是试着像这样做:
var now = 0;
var then = 0;
var dt = 0;
stage.addEventListener(
Event.ENTER_FRAME,
function(e:Event):void
{
now = getTimer();
dt = now-then;
//trace(dt);
then = now;
}
);
首先,100fps是一个非常高的帧速率。 正如您所见,它永远无法达到所需的fps 您应该选择实际达到的较低帧速率,而不是过高的帧速率。 很多游戏使用60,但30也很常见 正如您自己所经历的:帧速率不稳定。 一旦你做了任何事情,就必须进行计算,这可能需要也可能不需要超过一帧的时间来计算导致滞后的原因 解决方法是你在问题中所做的:根据帧之间的时间差进行游戏。 如果从最后一帧开始经过3毫秒,计算3毫秒后游戏应该处于什么状态。如果经过了不同的时间,比如5ms,则使用该时间,以此类推
这允许游戏以一致的速度运行,即使显示更新滞后。使用Adobe Scout解决性能问题。这是一个免费的一站式商店为这种考验。它精确地映射出了哪些组件,以及它们在每个帧中占用计算资源的时间。如果没有看到代码,很难说……导致这种情况的不是代码……但我可以告诉您。
getTimer()
在做什么?另外,如果导出一个发布swf,您是否注意到同样的行为?showgetTimer()
函数。@Fergoso:它在60或30 FPS时也不稳定。我发现非常奇怪的是,即使没有计算,帧率也不稳定。当我真的做某事的时候会有多晚?关于移动的正方形,我试着用dt乘以它的速度。这也许会使它更平滑一些,但我仍然不认为它的运动是平滑的。在30帧时,它看起来一点也不平滑。也许不是因为滞后峰值,而是因为缺乏FPS。