你如何在as3中随着时间推移加工密集型工作

时间:2015-01-03 01:34:44

标签: actionscript-3

我有一些运行很长时间的循环。

运行处理密集型代码会使PC或设备运行速度变慢,并使其无响应。我宁愿花一点时间来回答它是如何完成的。

如何限制计算以适应单帧运行时的处理时间范围?

1 个答案:

答案 0 :(得分:1)

如果您希望处理代码在单帧时运行一次,首先需要计算单个帧在脚本中的使用时间;

    public var startTimer:Number=0;
    public var singleFrameTime:Number=0;

Main

startTimer=getTimer();

然后在由Event.ENTER_FRAME事件触发的函数底部;

singleFrameTime = getTimer()-startTimer;

这可以获得单帧的毫秒时间。

现在,使用Timer类,您可以创建一个计时器;

var frameTimer:Timer = new Timer(singleFrameTime);

现在为它添加一个监听器并启动计时器;

frameTimer.addEventListener(TimerEvent.TIMER, excecute);
frameTimer.start();

execute()是您的函数,它将在单帧渲染时运行您的代码一次。

如果要不断将Timer更新为脚本中单帧渲染所需的时间,则可以使用frameTimer.delay更改计时器间隔。如果您需要多次捕获每帧之间的时间,则必须计算Event.ENTER_FRAME函数本身的延迟。

如果您想要更平滑的执行时间,那么一次获得singleFrameTime 60帧的总数,然后对结果取平均值以获得平均帧时间。

相关问题