Flash Tutorial: Preloader mit AS 3

Möchte man mit Flash größere Daten laden, kommt es vor das bei langsamen Internetverbindungen, Animationen zwischendurch aussetzen oder überhaupt kein Bild zu sehen ist. Für solche Fälle gibt es in Flash sogenannte Preloader, die den Flash-Film komplett vorladen um ihn dann anschließend vollständig und ohne Ruckler abzuspielen. Angewendet werden diese Preloader schon seit es Flash gibt, wir wollen uns heute aber einem mit AS 3 programmierten Preloaders zuwenden.

Dazu benötigen wir 2 Textfelder und einen Balken-Movieclip, um den Ladefortschritt zum einem als Zahl und zum anderen grafisch darzustellen. Als erstes erstellen wir also 2 Textfelder, eins nennen wir total_txt und das andere loaded_txt, um einerseits die geladenen und die gesamten Kilobytes anzuzeigen. Danach erstellen wir einen Balken mit 100 px Breite und 30 px Höhe und nennen ihn bar_mc. Die Platzierung ist dabei euch überlassen.

Und nun zum Code:

1. Zuerst wird der Loader angelegt. Zum laden nehmt bitte eine möglichst große externe SWF, um später beim lokalen testen überhaupt etwas zu sehen:

var loader:Loader = new Loader();
var url:URLRequest = new URLRequest("test.swf");

2. Um den Ladefortschritt anzuzeigen, benötigen wir nun in Actionscript 3 ein Event ProgressEvent.PROGRESS. Dieses ist dem LoaderInfo-Objekt untergeordnet unter contentLoaderInfo. Das Event wird bei jedem Ladefortschritt ausgelöst und muss nicht beendet werden. Man spart sich damit die Aufrufe über ENTER_FRAME, so wie es in AS 2 oft gelöst wurde:

loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, loading);

3. Danach brauchen wir das Ereignis Event.COMPLETE für das LoaderInfo-Objekt um abzufangen, wann der Ladevorgang fertig ist:

loader.contentLoaderInfo.addEventListener(Event.COMPLETE, ready);

4. Anschließend wird der Ladevorgang gestartet und der Anzeigeliste hinzugefügt:

loader.load(url);
addChild(loader);

5. Nun zu den Textfeldern. Hier werden nun die Bytes in Kilobytes umgewandelt, damit die Textfelder die geladenen, sowie die gesamten Kilobytes anzeigen:

function loading(evt:ProgressEvent){
loaded_txt.text = Math.round(evt.bytesLoaded / 1000);
total_txt.text = Math.round(evt.bytesTotal / 1000);
}

6. Für den Ladebalken benötigen wir nun noch eine Berechnung des Prozentwerts der geladenen Bytes im Verhältnis zu den gesamten Bytes. Dazu erweitern wir die Funktion loading() um 2 Codezeilen:

function loading(evt:ProgressEvent){
loaded_txt.text = Math.round(evt.bytesLoaded / 1000);
total_txt.text = Math.round(evt.bytesTotal / 1000);
var percent:int = 100 * evt.bytesLoaded / evt.bytesTotal;
bar_mc.width = percent;
}

7. Zum Schluß könnt ihr nun noch der Funktion ready() weitere Anweisungen hinzufügen. Oft wird hier zum nächsten Frame gesprungen oder der Abspielkopf wird auf play() gestellt. Was nun genau für Anweisungen dort hineinkommen ist euch überlassen:

function ready(evt:Event){
//Hier ist Platz für weitere Anweisungen;
}

Das wars auch schon. Nun könnt ihr ganz bequem mit Flash und Actionscript 3 einen Preloader bauen und eure Filme vorladen.