for-Schleife pausieren und auf Event warten lassen

Precog

Erfahrenes Mitglied
Hi,

wie kann ich eine for-Schleife während eines Durchgangs solange pausieren lassen, bis ein spezielles Event eintritt?

Ich möchte eine Reihe Bilder laden lassen (in der for-Schleife), allerdings soll das jeweils nächste Bild erst geladen werden wenn das vorherige komplett da ist. Ich möchte also die for-Schleife auf den EventListener des lade-Vorgangs warten lassen, insbesondere auf das Event.COMPLETE.

Hat da jemand eine Idee?
 
wie kann ich eine for-Schleife während eines Durchgangs solange pausieren lassen, bis ein spezielles Event eintritt?

Hi,
gar nicht ;)
während einer Schleifeabarbeitung wird der Bildschirm nicht aktualisiert.

Wenn die Bilder sequenziell geladen werden sollen mußt du solange warten bis dein Bild geladen wurde. Nachdem dann das complete Event gefeuert wurde kannst du das nächste Bild mit dem URLLoader laden.
 
alles klar, ich habs jetzt mit einem quasi rekursiven Aufruf gelöst.

Kann ich denn allgemein an eine Funktion einen Listener anhängen, der ein Event wirft sobald die Funktion abgearbeitet ist?

Und: Kann ich einen Listener an eine Variable hängen, der ruft wenn sie sich verändert?

Entschuldigt meine naiven Fragen, ich fange gerade erst an mit Actionscript ;)
 
alles klar, ich habs jetzt mit einem quasi rekursiven Aufruf gelöst.

Kann ich denn allgemein an eine Funktion einen Listener anhängen, der ein Event wirft sobald die Funktion abgearbeitet ist?

Eigentlich ist doch immer bekannt wann eine Funktion abgearbeitet ist. ;)
Beim einem preload wäre das zb wenn der ladestatus bei 100% ist.
Ab diesem Zeitpunkt kannst du dann ein event dispatchen.

Und: Kann ich einen Listener an eine Variable hängen, der ruft wenn sie sich verändert?

Du könntest einen Listener an ein Objekt hängen welches prüft ob sich die Variable geändert hat und dann entsprechend ein Event feuert:
Code:
package  {
	import flash.display.Sprite;
	import flash.events.Event;
	
	public class Main extends Sprite{
		
		private var m:Model;
		
		public function Main() {
			this.addEventListener(Event.ADDED_TO_STAGE, init);
		}
		
		private function init(e:Event):void {
			this.removeEventListener(Event.ADDED_TO_STAGE, init);
			//
			//Hier gehts los
			m = new Model();	
			m.addEventListener(Model.DATA_CHANGED, onChanged);
			m.data = 5; //DATEN HABEN SICH GEÄNDERT
		}
		
		private function onChanged(e:Event):void {
			trace("DATEN HABEN SICH GEÄNDERT")
		}
		
		
	}

}

Das Model:

Code:
package  {
	import flash.events.Event;
	import flash.events.EventDispatcher;
	
	public class Model extends EventDispatcher{
		
		private var _data:Number = 100;
		public static const DATA_CHANGED:String = 'data_changed';
		
		public function Model() {}
		
		public function set data(n:Number):void {
			//Prüfen ob daten sich geändert haben und event feuern
			if (_data != n) {
				dispatchEvent(new Event(Model.DATA_CHANGED, false, false));
			}
			_data = n;
		}
	}

}
 
Zurück