我有一些运行很长时间的循环。
运行处理密集型代码会使PC或设备运行速度变慢,并使其无响应。我宁愿花一点时间来回答它是如何完成的。
如何限制计算以适应单帧运行时的处理时间范围?
答案 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帧的总数,然后对结果取平均值以获得平均帧时间。