#actionscript-3
#actionscript-3
Вопрос:
У меня есть серия вычислений, которые я выполняю над кучей объектов, хранящихся в массиве. Каждая функция довольно требовательна к процессору, но если вы запускаете только одну функцию, она просто отлично работает. Здесь схема :
var array:Array = new Array();
function a():void{
//Do some stuff with array
b();
}
function b():void{
//Do some stuff with array
c();
}
function c():void{
//Do some stuff with array
d()...
}
Еще в AS2.0 я обнаружил, что если бы я запускал очень короткую «анимацию» между вызовами функций (например, 200 мс), я мог бы заставить проигрыватель не зависать / зависать
var t:Tween = new Tween(...
t.onMotionFinished = function(){
b();
}
Я ищу более «обычный» способ 🙂
Комментарии:
1. Это в настройках игры? Например, вы вычисляете те, Которые будут проверять столкновения, проверять линию видимости и т. Д.?
2. Нет, просто набор операций с числами, не связанных с игрой.
3. Ах, достаточно справедливо. Я думаю, что я просто неправильно перевел ваше использование слова «player». Действительно, какой маршрут вы выберете, зависит от приложения.
Ответ №1:
Вы можете использовать Timer
var timer:Timer = new Timer(200,0);
timer.addEventListener(TimerEvent.TIMER,timerHandler);
...
protected function timerHandler(e:Event):void {
b();
}
Комментарии:
1. Да, я мог бы написать TimerManager, который хранит массив функций для выполнения над массивом, который будет работать
Ответ №2:
Вы можете использовать Timmer, или вы можете сделать что-то вроде этого :
var oldTime:Number = getTimer();
var thisTime:Number = 0;
var counter:int = 0;
var functions:Vector<Function> = new Vector<Function>();
functions.push(a,b,c);
addEventListener(Event.ENTER_FRAME, onLoop);
private function onLoop(e:Event):void
{
var resultTime:Number = getTimer() - oldTime;
if(resultTime > 200 )
{
functions[counter].call();
counter;
oldTime = resultTime;
if(counter >= functions.length)
{
counter = 0;
removeEventListener(Event.ENTER_FRAME,onLoop);
}
}
}
Просто добавьте прослушиватель ENTER_FRAME, когда необходимо запустить выполнение. Я не проверял код в деталях, но я надеюсь, что он будет работать для вас…