AS3 - Asynchroner Methodenaufruf

In unserem aktuellen Projekt machen wir ein paar Heavy Bitmap-Operationen was dazu führt, das der Flash Player zeitweise einfriert. Was Abhilfe bringen würde, wenn der Prozess asynchron ablaufen würde.
Hier unser der Ausgangs-Loop:

// default loop for(var i:uint = 0; i < 1000; i++){ // heavy bitmap operation here }

Um den Loop ansynchron ablaufen zu lassen muss man das ganze etwas umschreiben und eine Methode daraus machen:

function runAsync(start:uint, maxLoops:uint, amount:uint, waitTime:Number){ for(var i:uint = start; (i < start+ amount) && (i < maxLoops); i ++){ trace(i); // heavy bitmap operation here } if (i < maxLoops) { trace('wait'); var timer:Timer = new Timer(waitTime, 1); timer.addEventListener(TimerEvent.TIMER_COMPLETE, function(e:TimerEvent){ runAsync(i, maxLoops, amount, waitTime); }); timer.start(); } else { // dispatch custom complete event } } // start the loop runAsync(0, 1000, 100, 50);

Jetzt werden die 1000 Loops in 10 Böcke mit jeweils 100 Loops aufgeteilt und dazwischen wird 50 Millisekunden gewartet. In der Wartezeit kann der FlashPlayer sich um andere Sachen kümmern, wie z. B. den Frame neu zu zeichnen.

Marco

daddy in love, runner, kiter, engineer, berlin, sheeeeeit!