Actionscript 3不稳定的帧率

时间:2015-03-10 19:42:46

标签: actionscript-3 optimization lag frame-rate

我试图在Actionscript 3中开发一款游戏,但突然而频繁的拉格让游戏非常不舒服。

目前整个游戏只是移动一个正方形,所以没有重大的计算应该导致这个。

我尝试过同时使用Timer和Enter_Frame事件。他们都非常不稳定。我也试过不同的帧率。

我能做些什么来阻止这种情况吗?

//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 9 11 30 56 49 5 10 11 10 11 8 11 10 9 11 9 11 10 10 10 10 9 10 10 10 14 7 9 14 6 10 10 11 9 10 10 11 9 10 10 11 10 9 11 9 10 10 11 9 11 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 29 7 5 5 14 4 6 10 10 10 10 10 10 10 10 10 10 10 10 11 10 10 10 10 10 10 10 10 10 10 10 10 10 9 11 10 10 9 12 8 11 10 10 10 10 10 10 12 8 9 11 10 10 9 11 10 10 11 10 9 10 10 11 10 9 10 11 10 10 9 11 10 10 10 10 10 9 11 10 10 9 11 10 9 10 10 11 9 10 10 10 10 11 9 10 11 9 11 9 10 31 6 5 4 6 8 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 9 11 11 9 10 10 10 10 10 10 11 9 10 10 10 10 10 10 10 10 10 10 10 10 10 11 9 10 10 11 9 10 11 9 10 11 9 10 10 10 9 11 14 6 9 10 11 10 11 10 9 10 11 10 9 11 9 15 5 11 35 15 42 64 37 15 6 5 10 11 9 10 11 9 10 11 9 10 10 10 10 10 10 10 10 10 10 10 28 63 65 63 8 15 56 57 13 6 13 12 6 11 36 69 20 25 12 6 6 5 5 33 36 57 20 34 21 12 9 13 6 6 5 9 6 9 7 7 10 10 10 11 10 10 10 10

我上传了一个swf来演示问题(此处为60 FPS)。 Here is the link.(使用键移动)。正如您将体验到的那样,广场大部分时间都会平稳移动,但频繁的拉格使其不舒服。

编辑:当所有代码都在FLA时间轴中时,与大多数代码在不同的AS文件中相比,似乎应用程序运行得更顺畅。可能的原因是什么?

3 个答案:

答案 0 :(得分:2)

使用 Adob​​e Scout 解决性能问题。这是一场免费的一站式服务。它精确地确定了哪些组件,以及它们在每个帧内占用计算资源的时间。

答案 1 :(得分:0)

坚持30fps。

不确定以下内容是否有助于改善效果。但尝试做:

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;
    }
);

答案 2 :(得分:0)

首先100fps是一个非常高的帧速率。 如您所见,它永远无法达到所需的fps。

你应该采用实际达到的较低帧速率而不是顶部的帧速率。 很多游戏使用60,但30也很常见。

您经历过自己:帧速率不稳定。 一旦你做了任何事情,就必须进行计算,这可能需要或不需要超过一帧来计算哪一个导致滞后。

解决方案就是您在问题中所做的:根据帧之间的时差制作游戏。 如果从最后一帧开始经过3毫秒,则计算3分钟后你的游戏应处于什么状态。如果过了不同的时间,比如5ms,那就用它等等。

这使游戏能够以一致的速度运行,即使显示的更新滞后。