Zum Inhalt

Flash: Nach onLoadInit (MovieClipLoaderClass) eigene Funktion ausführen

Manchmal bin ich überrascht, wie leicht sich Probleme lösen lassen…

Vor wenigen Minuten erwuchs das Bedürfnis, zu unterschiedlichen Zeitpunkten im Ablauf eines Flashfilms verschiedene Daten (SWF, JPG) nachzuladen. Die naheliegende Herangehensweise war, ist und bleibt, dafür die in Flash/AS eingebaute MovieClipLoaderClass zu verwenden.

Ich wollte allerdings gern jeweils bestimmen können, was genau passieren soll, nachdem ein Ladevorgang abgeschlossen ist. Beispielsweise sollte im einen Fall ein SWF geladen und anschließend in dessen eigener Zeitleiste zu einem bestimmten Frame geleitet werden. In einem anderen Fall sollte ein JPG geladen und anschließend skaliert werden.

Die MovieClipLoaderClass bringt ja bereits einen Satz sehr nützlicher event listeners mit, die es u.a. erlauben, den Ladefortschritt zu überwachen und zu visualisieren. Der entscheidende event listener ist im vorliegenden Szenario für mich onLoadInit, welcher in Kraft tritt, wenn eine Datei vollständig geladen worden und per Skript ansprech- und bearbeitbar ist.

Bisher hatte ich immer in der folgenden Form mit onLoadInit gearbeitet:
loadListener.onLoadInit = function (mc) {
// mach dies oder jenes
// über "mc" ist die Zeitleiste mit dem
// nachgeladenen Inhalt erreichbar
}

Es funktioniert aber auch so:
loadListener.onLoadInit = doAfterLoading;

function doAfterLoading(mc) {
// mach dies oder jenes
// über "mc" ist wieder die Zeitleiste mit dem
// nachgeladenen Inhalt erreichbar
}

Und das bietet folgende interessante (und für mich problemlösende) Möglichkeit:
function loadStuff(file, target, func) {
var mcLoader = new MovieClipLoader();
var loadListener = new Object();

mcLoader.addListener(loadListener);
mcLoader.loadClip(file,target);

loadListener.onLoadInit = func;

loadListener.onLoadStart = function(mc) {
//
};
loadListener.onLoadError = function(target_mc, errorCode, httpStatus) {
//
};
loadListener.onLoadProgress = function(mc, loaded, total) {
//
};
}

this.createEmptyMovieClip("con",0);
loadStuff("test.jpg",con,doAfterLoading1);

Mit dieser Funktion loadStuff() kann ich jetzt, wie gewünscht, externes Material in eine von mir bestimmte Zeitleiste laden lassen und bestimmen, welche Funktion anschließend ausgeführt werden soll. So kann jeder nachgeladene Inhalt seine Sonderbehandlung erhalten.

Veröffentlicht inAllgemein
Loading Facebook Comments ...

Schreibe den ersten Kommentar

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert