Если вы хотите, чтобы ваше приложение работало со скоростью N кадров в секунду, то вы можете рисовать в цикле в течение 1 / N секунд *, где N - это, как правило, частота кадров на этапе (которую вы можете получить и установить):
import flash.utils.getTimer;
import flash.events.Event;
private var _time_per_frame:uint;
... Где-то в вашем главном конструкторе:
stage.frameRate = 30;
_time_per_frame = 1000 / stage.frameRate;
addEventListener(Event.ENTER_FRAME, handle_enter_frame);
...
private function handle_enter_frame(e:Event):void
{
var t0:uint = getTimer();
while (getTimer()-t0 < _time_per_frame) {
// ... draw some stuff
}
}
- Обратите внимание, что это несколько упрощает и может привести к более низкой результирующей частоте кадров, чем указано stage.frameRate, поскольку Flash требуется некоторое время для выполнения рендеринга между кадрами. Но если вы бьете (рисуете на растровое изображение на экране), а не рисуете в векторе или добавляете фигуры на экран, то я думаю, что вышеприведенное должно быть довольно точным.
Если код приводит к более низкой, чем требуемая, частоте кадров, вы можете попробовать что-то столь же простое, как просто взять половину отведенного времени для кадра, оставив другую половину для Flash для рендеринга:
_time_per_frame = 500 / stage.frameRate;
Есть также мониторы FPS, которые вы можете использовать для контроля частоты кадров во время рисования. Google монитор частоты кадров as3 .