AS3 вызывая функции в функциях и избегая сбоя / зависания плеера? - PullRequest
0 голосов
/ 07 октября 2011

У меня есть серия вычислений, которые я делаю над кучей объектов, хранящихся в массиве.Каждая функция довольно требовательна к процессору, но если вы запускаете только одну функцию, она работает нормально.Вот схема:

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, я обнаружил, что если бы я запускал очень короткую "Tween" между вызовами функций (например, 200 мс), я мог бы заставить плеер не падать /повесить

var t:Tween = new Tween(...
t.onMotionFinished = function(){
b();
}

Я ищу более "обычный" способ:)

Ответы [ 2 ]

1 голос
/ 07 октября 2011

Вы можете использовать Timer

var timer:Timer = new Timer(200,0);
timer.addEventListener(TimerEvent.TIMER,timerHandler);

...

protected function timerHandler(e:Event):void {
    b();
}
0 голосов
/ 07 октября 2011

Вы можете использовать Тиммер, или вы можете сделать что-то вроде этого:

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, когда нужно запустить выполнение. Я не проверял код в деталях, но я надеюсь, что он вам подойдет ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...