18 Externe Filme
Größere Anwendungen auf mehrere SWF-Filme verteilenSie werden lernen:
- Wie laden Sie externe SWF-Filme?
- Was müssen Sie beachten, um häufige Fehler zu vermeiden?
- Wie laden Sie externe Bilder?
- Wie verfahren Sie mit externem Code?
Schlecht außen, kostbar innen. – Shakespeare
Eine Flash-Anwendung besteht in der Praxis oft nicht nur aus einem, sondern aus mehreren SWF-Filmen. Diese externen Filme sorgen für viel Flexibilität: Sie können für jedes Produkt einen eigenen Film anlegen und alle dann im Hauptfilm sammeln. Für diese Aktion benötigen Sie ActionScript; dabei gibt es allerdings Einiges zu beachten.
18.1 Externe Filme laden
Das Laden eines externen Films funktioniert mit der Methode loadMovie(SWF, Level) der MovieClip-Klasse. Der erste Parameter ist klar: Er gibt die Adresse des externen Films auf dem Server an. Der zweite Parameter, das Level (auch Stufe oder Dokumentebene genannt), stellt den Programmierer dagegen gerne vor Rätsel.
Abbildung 18.1 Ein externer Film landet auf einem eigenen Level.
So schwer ist es aber nicht. Sie erinnern sich an das Konzept der Tiefe aus Kapitel 13, »Zeichnen und Zufall«? Ein per ActionScript erstellter MovieClip landet (optisch, nicht hierarchisch) über den Elementen der Zeitleiste, ein externer Film landet auf einer eigenen Stufe. Der Hauptfilm hat immer die Stufe 0. Jeder externe Film ist auf einer höheren Stufe positioniert. Alle Elemente, auch die per ActionScript erstellten MovieClips, einer höheren Stufe liegen höher als die der tieferen Stufe.
Sehen Sie sich das näher an:
loadMovie("extern.swf", 0);
lädt ein externes SWF-Dokument in die Ebene des Hauptfilms. Der aktuelle Hauptfilm wird ersetzt.
Die folgende Zeile lädt die externe SWF-Datei in eine eigene Ebene:
Adresse der externen Datei |
Die Adresse der externen Datei können Sie relativ angeben (im Beispiel verweist sie auf eine Datei im gleichen Ordner) oder absolut mit http://. |
loadMovie("extern.swf", 1);
Alternativ können Sie das Level auch als String angeben:
loadMovie("extern.swf", "_level1");
Das Level identifizieren Sie mit dem Schlüsselwort _level, gefolgt von der Nummer.
Neben loadMovie(Film, Level) gibt es noch loadMovieNum (Film, Level), das einen externen Film auf ein bestimmtes Level lädt (deswegen der Namenszusatz Num). Das geht allerdings wie hier gesehen auch mit loadMovie(). Da diese Methode in der Praxis wesentlich häufiger angewendet wird, setzen auch wir sie in unseren Beispielen ein.
Werte über Stufen austauschen
Strukturwissen |
Wenn Sie einen externen Film per ActionScript laden, taucht er nicht im Zielpfad-Editor oder im Film-Explorer auf, da er ja erst beim Interpretieren des SWF-Films im Flash-Player und noch nicht in der Entwicklungsumgebung geladen wird. Deswegen sollten Sie die Struktur des externen Films natürlich gut kennen, um auf Elemente daraus zuzugreifen; oder Sie lassen ihn in Flash offen. |
Wenn Sie einen Film auf eine Stufe laden, wie können Sie dann auf Variablen, Funktionen und MovieClips in diesem Film zugreifen? Sie müssen das Level als Ausgangsadresse angeben. Die folgende Zeile greift beispielsweise auf eine Variable des neu in Stufe 1 geladenen Films zu:
_level1.variable
Ein Beispiel finden Sie in der Schritt-für-Schritt-Anleitung »Mit externen Filmen arbeiten« im Abschnitt weiter unten.
Absolute Adressierung
Ein Problem von externen Filmen liegt in der absoluten Adressierung: Wenn Sie einen Film laden, der auf Variablen, Textfelder, Schaltflächen oder MovieClips mit absoluter Adressierung, also beginnend mit _root, zugreift, funktioniert das nicht. Ersetzt der geladene Film nicht den bisherigen Hauptfilm, dann ist der Hauptfilm _root, der geladene Film dagegen _level1, _level2 etc. Sämtliche absolute Adressierungen im geladenen Film scheitern demzufolge. Es gibt zwei Taktiken, um dieses Problem zu umgehen:
- Sie setzen in geladenen Filmen nur die relative Adressierung ein. Ist nicht von Anfang an klar, ob ein Film in einen anderen geladen werden soll, bevorzugen Sie besser gleich die relative Adressierung.
- Ab Flash MX 2004 können Sie mit der Eigenschaft _lockroot einen beliebigen MovieClip zur Wurzel (_root) machen. Diese Wurzel gilt dann für alle untergeordneten MovieClips. Wenn Sie möchten, dass ein geladener Film seine Wurzel behält, geben Sie in seiner Hauptzeitleiste den folgenden Befehl ein:
_lockroot = true;
Film entfernen
Ein Film, den Sie laden, möchten Sie unter Umständen auch wieder loswerden. Das gelingt Ihnen mit der Methode unloadMovie(). Sie erwartet keinen Parameter, stattdessen adressieren Sie davor den externen Film, den Sie entfernen möchten:
Fehlerquelle |
Sie können einen Film nicht laden und sofort wieder loswerden. Ein Film lässt sich nämlich nicht entfernen, solange er nicht komplett geladen ist. |
_level1.unloadMovie();
Obige Zeile entfernt den Film von Level 1.
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.