Sie können aus einer Flash SWF-Datei heraus andere externe SWF-Dateien als Elemente laden. Es gibt verschiedene Gründe für das Laden von externen SWF-Dateien:
- Da ein Projekt in mehrere Filme geteilt werden kann, sind die einzelnen SWF-Dateien kleiner. Kleinere Dateien können schneller geladen und der Speicher kann effektiver verwaltet werden.
- Sie können nur den benötigten Inhalt laden, basierend auf den Benutzerhandlungen im Film.
- Mehrere SWF-Dateien können nacheinander wiedergegeben werden, ohne dass der Browser eine weitere HTML-Seite lädt. Die Seiten verfügen nicht über die Funktionen zum Anhalten oder Aktualisieren, die mit dem erneuten Laden in Verbindung stehen.
- Sie sind flexibler bei der Organisation Ihrer Projektelemente.
- Es kann eine komplexe Benutzeroberfläche, die nicht auf einer einzelnen SWF-Datei basiert, erstellt werden. Viele SWF-Dateien können kombiniert werden, um die Benutzeroberfläche zu erstellen. Das Kombinieren von SWF-Dateien vereinfacht das Bearbeiten, da eine einzelne, kleinere SWF-Datei überarbeitet werden kann, ohne dass sich dies auf andere Teile der Benutzeroberfläche auswirkt.
- Mehrere Autoren können am selben Projekt zusammenarbeiten, indem sie an unterschiedlichen FLA-Dateien arbeiten.
Das Platzieren von Inhalt in eine separate SWF-Datei ähnelt dem Platzieren von Inhalt in sein eigenes Movieclip-Symbol. Der Unterschied besteht darin, dass der Inhalt außerhalb der SWF-Hauptdatei vorhanden ist. Sie können außerdem Bilddateien wie JPG, PNG, GIF laden.
Verwenden Sie zum Laden einer externen SWF-Datei aus einer anderen SWF-Datei heraus eine der folgenden Möglichkeiten:
- Die Loader-Klasse in ActionScript 3.0
- Der loadMovie-Befehl in ActionScript 2.0
- Die MovieClipLoader-Klasse in ActionScript 2.0
Loader-Klasse in ActionScript 3.0 verwenden
Die Loader-Klasse in ActionScript 3.0 ist eine Unterklasse von DisplayObject, die Sie zum Laden und Anzeigen von externem Inhalt verwenden. Verwenden Sie zum Laden der SWF-Datei die load-Methode der Klasse. Die load-Methode hat einen erforderlichen Parameter, eine URLRequest-Instanz, die die URL-Adresse des zu ladenden Inhalts enthält.
Das folgende Codebeispiel erstellt eine Loader-Instanz und lädt eine externe SWF-Datei mit dem Namen „myExternalMovie.swf“.
var myLoader:Loader = new Loader(); // create a new instance of the Loader class var url:URLRequest = new URLRequest("ExternalSWF.swf"); // in this case both SWFs are in the same folder myLoader.load(url); // load the SWF file addChild(myLoader); // add that instance to the display list, adding it to the Stage at 0,0 // (optional) myLoader.x = 10; // move the loaded SWF 10 pixels to the right (from the left edge) myLoader.y = 175; // move the loaded SWF 175 pixels down from the top // (optional) load a second external SWF file var my2ndLoader:Loader = new Loader(); var url2:URLRequest = new URLRequest("ExternalSWF2.swf"); my2ndLoader.load(url2); addChild(my2ndLoader); // optionally, you could put the 2nd SWF beneath // the 1st by using addChildAt(my2ndLoader, 1); // displacing the 1st SWF from position 1 to 2 in the display list // (optional) scaling of the 2nd SWF file my2ndLoader.scaleX = 2; // scale the SWF horizontally by 200% my2ndLoader.scaleY = 2; // scale the SWF vertically by 200%
Die URL der SWF-Datei, die geladen wird, kann relativ oder absolut sein. Weitere Informationen dazu, wie Flash Player URLs verarbeitet, finden Sie nachstehend unter Relative Pfade. Weitere Informationen zur Loader-Klasse finden Sie unter Loader im Platform ActionScript-Referenzhandbuch.
Verweise auf root, wenn verfügbar, zeigen immer das oberste Anzeigeobjekt in dem Teil der Anzeigelistenstruktur, der von dieser SWF-Datei dargestellt wird. (Bei Bildern verweist „root“ auf das Bitmapobjekt.)
Hinweis: In ActionScript 3.0 gibt es keine entsprechende Eigenschaft zur _lockroot- oder _level-Eigenschaft in ActionScript 2.0. Weitere Informationen finden Sie im ActionScript 3.0 Entwicklerhandbuch unter Grundlagen der Programmierung.
Verwandter Inhalt für ActionScript 3.0:
- Beispieldateien für diese TechNote. Ein Satz von drei FLA und drei entsprechenden SWF-Dateien, einschließlich eine übergeordnete SWF-Datei und zwei SWF-Dateien, die die übergeordnete Datei lädt.
- „Hilfe“ > „ActionScript 3.0 Entwicklerhandbuch“ > Laden einer externen SWF-Datei
- „Hilfe“ > „ActionScript 3.0 Entwicklerhandbuch“ > Dynamisches Laden von Anzeigeinhalten
- Loading multiple external SWFs within a main SWF file – CreativeCow.net-Foren
- Videotutorial: ActionScript 101 - Episode 6: Adding named objects to the Stage. Von Doug Winnie. Ein Beispiel dafür, wie der Bühne das geladene externe Element hinzugefügt werden kann und wie der Speicherort oder andere Eigenschaften geändert werden können.
- Tutorial: Loading and unloading SWFs – FlashAndMath.com
loadMovie-Befehl in ActionScript 2.0 verwenden
Der loadMovie-Befehl lädt eine externe SWF-Datei oder ein Bild in einen Movieclip oder eine andere Ebene des übergeordneten Films in ActionScript 2.0.
Der loadMovie Befehl kann in zwei verschiedenen Formen auftreten:
- MovieClip.loadMovie-Methode: Die Movieclip-Methode wird zum Laden von externem Inhalt in eine bestimmte Movieclipinstanz verwendet.
- Globale loadMovie-Funktion: Die globale loadMovie-Funktion kann zum Laden von Inhalt in Filme oder Ebenen verwendet werden. Die globale Version weist außerdem zwei Varianten auf: loadMovie und loadMovieNum. Die erste Variante lädt Inhalt in Filme oder Ebenen und die zweite Variante (loadMovieNum) lädt Inhalt speziell in Ebenen.
MovieClip.loadMovie
Beim Laden von externem Inhalt in Movieclipinstanzen empfiehlt Adobe, dass Sie die Version der Movieclip-Methode von loadMovie verwenden. Diese Version wird direkt vom Movieclip, in den der Inhalt geladen werden soll, aufgerufen und wird an die URL des Inhalts übergeben.
myMovieClipInstance.loadMovie("myExternalMovie.swf"); // here only the filename is given, indicating the SWF file // is in the same folder as the parent SWF.
Die URL des Inhalts, die geladen wird, kann relativ oder absolut sein. Weitere Informationen dazu, wie Flash Player mit URLs umgeht, finden Sie nachstehend unter Relative Pfade.
Nach dem Laden wird der Inhalt im Containermovieclip angezeigt. Der Speicherort sowie andere grundlegende Eigenschaften des Containermovieclips werden beibehalten. Alle benutzerdefinierten Eigenschaften oder Funktionen, die im Containermovieclip definiert werden, sind jedoch nicht länger vorhanden. Der neue Inhalt ersetzt alle vorherigen Inhalte (einschließlich Code und Ereignisprozedur wie z. B. onRelease). Daher kann die Verwendung einer onLoad-Ereignisprozedur für den Movieclip nicht funktionieren. Verwenden Sie in diesem Fall die MovieClipLoader-Klasse (siehe unten). Weitere Informationen zu MovieClip.loadMovie finden Sie im ActionScript 2.0-Referenzhandbuch unter MovieClip.loadMovie.
Globale loadMovie- und loadMovieNum-Funktionen
Der loadMovie-Befehl ist außerdem als globale Funktion vorhanden. Diese Funktion hat zwei erforderliche Parameter, die URL des externen Inhalts und das Ziel, in den der Inhalt geladen wird. Der Zielparameter kann entweder ein String oder ein Verweis sein. Die folgenden Zeilen entsprechen dem Laden von „myExternalMovie.swf“ in die Movieclipinstanz mit dem Namen myContainer:
loadMovie("myExternalMovie.swf", myContainer); // the target myContainer is an object reference loadMovie("myExternalMovie.swf", "myContainer"); // the target "myContainer" is a string
loadMovie kann außerdem Inhalt in verschiedene Ebenen von Flash Player laden. Ebenen in Flash Player sind wie Playerebenen. Mehrere Filme können in derselben Instanz von Flash Player wiedergegeben werden, ohne ineinander verschachtelt zu sein. Jede Ebene stellt einen eindeutigen Stamm dar, in dem Filme unabhängig von Filmen in anderen Ebenen wiedergegeben werden können (die Verwendung von _lockroot ist erforderlich).
Sie können auf Ebenen in ActionScript mithilfe von _level gefolgt von einer Zahl, die die Ebenenzahl darstellt, verweisen. Der erste in Flash Player geladene Film ist auf _level0. Dieser Ebene können zusätzliche Ebenen hinzugefügt werden. Der folgende Aufruf an loadMovie lädt „myExternalMovie.swf“ in Ebene 1 über den Film, der derzeit im Player wiedergegeben wird.
loadMovie("myExternalMovie.swf", "_level1");
Eine Variante der globalen loadMovie-Funktion ist loadMovieNum. Diese Methode ist genau wie loadMovie, außer, dass sie nur auf Ebenen angewendet wird und zwar nach Zahl und nicht nach Namen. Zum Laden einer externen SWF-Datei in Ebene 1 (_level1) verwenden Sie beispielsweise Folgendes:
loadMovieNum("myExternalMovie.swf", 1);
Beim Laden in Ebenen empfiehlt Adobe die Verwendung von loadMovieNum anstatt loadMovie. Weitere Informationen finden Sie im ActionScript 2.0-Referenzhandbuch unter global loadMovie.
Verwenden Sie _lockroot, um _root-Konflikte zu vermeiden.
Beim Laden eines externen Films in einen anderen Film, ändert sich der _root-Verweis des geladenen Movieclips von seiner Hauptzeitleiste in die Zeitleiste des Films, der ihn geladen hat. Anders ausgedrückt heißt das, dass _root immer auf die oberste Zeitleiste in der Hierarchie verweist. Wenn _root nicht auf die oberste Zeitleiste in der Hierarchie verweisen soll, setzen Sie die _lockroot-Eigenschaft der Hauptzeitleiste des geladenen Movieclips auf true. Diese Eigenschaft weist alle untergeordneten Elemente dieser Zeitleiste an, beim Verweis auf _root ebenfalls auf die Zeitleiste zu verweisen.
this._lockroot = true; // add this code in the main timeline of the SWF file that will be loaded into another SWF
Hinweis: Die _lockroot-Eigenschaft ist nur verfügbar, wenn auf Flash Player 7 oder höher veröffentlicht wird.
Verwandter Inhalt für ActionScript 2.0:
- „Hilfe“ > „ActionScript 2.0 – Arbeitshandbuch“ > Laden externer SWF-Dateien und Bilddateien
MovieClipLoader-Klasse in ActionScript 2.0 verwenden
Die MovieClipLoader-Klasse in ActionScript 2.0 vereinfacht das Ladeverfahren von externem Inhalt in Movieclipinstanzen. Wie zuvor erwähnt, werden in Movieclips definierte Variablen und Funktionen entfernt, wenn neuer Inhalt in diese Movieclips geladen wird. Rückrufe wie onLoad sind nicht möglich. Der MovieClipLoader umgeht diese Beschränkung jedoch, indem er als Surrogat in derartigen Ereignissen fungiert. Sie erstellen separate MovieClipLoader-Instanzen, um das Laden von Inhalt in einen anderen Movieclip zu verwalten. Daher tritt das Löschen von Variablen oder Funktionen in diesem Movieclip nicht auf.
Beim Laden von Inhalt in einen Movieclip über eine MovieClipLoader-Klasse, müssen Sie zuerst eine neue Instanz der Klasse erstellen. Anschließend verwenden Sie loadClip, um Inhalt in einen Zielmovieclip zu laden. Im folgenden Beispiel wird der neue Inhalt in den Movieclip myContainer geladen.
var myLoader:MovieClipLoader = new MovieClipLoader(); myLoader.loadClip("myExternalMovie.swf", myContainer);
Möchten Sie sicherstellen, dass der Inhalt geladen wurde, verwenden Sie eine onLoadInit-Ereignisprozedur mit der MovieClipLoader-Instanz.
var myLoader:MovieClipLoader = new MovieClipLoader(); myLoader.addListener(this); myLoader.loadClip("myExternalMovie.swf", myContainer); function onLoadInit(mc:MovieClip) { trace("content has been loaded into "+mc); }
Möchten Sie mehr Kontrolle über die Informationen bezüglich des Ladens von Inhalt in einen Movieclip, verwenden Sie die MovieClipLoader-Klasse anstatt MovieClip.loadMovie. (Verwenden Sie beispielsweise diese Ereignisprozedur, wenn Sie den Ladefortschritt prüfen möchten.) Weitere Informationen zur MovieClipLoader-Klasse finden Sie im ActionScript 2.0-Referenzhandbuch unter MovieClipLoader.
Note: Die MovieClipLoader-Klasse ist nur verfügbar, wenn auf Flash Player 7 oder höher veröffentlicht wird.
Relative Pfade zum Laden von Inhalt verwenden
Die Verwendung von relativen Pfaden mit Loader und loadMovie kann verwirrend sein. Da die Zeitleiste einer SWF-Datei oder eines Movieclips eine loadMovie-Aktion durchführen kann, müssen Sie sich fragen, auf welche Zeitleiste sich der geladene Film bezieht. Bezieht er sich auf die Hauptzeitleiste auf _level0? Oder bezieht er sich auf die Zeitleiste, die die Filmladeaktion durchführt? Die Antwort lautet: Geladene Filme beziehen sich immer auf die Zeitleiste, die die Filme geladen hat. Eine Diskussion über relative Pfade, die auch relevant für das Laden externer SWF-Dateien ist, finden Sie unter Nicht korrekt referenzierte relative URLs | Flash (tn_04157).
Bildrate
In den meisten Fällen übernimmt ein geladener Film die Bildrate des übergeordneten Films. Beispielsweise wird eine SWF-Datei, deren Bildrate 12 BpS beträgt, mit 24 BpS wiedergegeben, wenn sie in einen Film geladen wird, dessen Bildrate 24 BpS beträgt. Es sei denn, der geladene Film enthält einen Sound auf der Zeitleiste, deren Synchronisation auf „Stream“ eingestellt ist. Nur in diesem Fall übernimmt der Hauptfilm die Bildrate des geladenen Films, um die korrekte Wiedergabe des Sounds zu gewährleisten.
Hinweis: In ActionScript 3.0 können Sie mithilfe der Stage.frameRate-Eigenschaft die Bildrate dynamisch ändern.
Zusätzliche verwandte Inhalte
- SWF- zu SWF-Kommunikation über ActionScript (enthält übergeordnete zu untergeordnete und untergeordnete zu übergeordnete Kommunikation)
Schlüsselwörter: Flash Player, Film laden; ActionScript; Skripterstellung; Ebenen; Ziel anweisen; Variablen; Ziel; Instanz; SWF; loadMovie; tn_14190
Bei Ihrem Konto anmelden