rss twitter

Auf MovieClips & Funktionen externer SWFs zugreifen

Es gibt immer mal wieder den Fall, dass man eine SWF nachlädt und diese SWF mit dem Hauptfilm kommunizieren muss. Sei es, dass man einen Button klickt und im Hauptfilm passiert etwas oder es soll Variablen/Objekte in den Hauptfilm schleusen. Wir schauen uns einmal an, wie man am leichtesten eine Unterhaltung der beiden Filme in AS3 umsetzt. Bestes Beispiel für eine solche Unterhaltung ist eine simple Webseite, deren Hauptfilm aus der Navigation besteht und der Inhalt aus externen SWFs geladen und dargestellt wird. Wenn ich also auf einen Navigationspunkt klicke, soll die SWF geladen und in einem Container dargestellt werden. Wie man das macht seht ihr bereits in einem anderen Artikel: SWFs sicher laden & sauber entladen. Heute beschäftigen wir uns jedoch damit, wie man mit dem geladenen SWF kommunizieren kann, also einerseits vom Hauptfilm mit der nachgeladenen, andererseits von der geladenen mit der Haupt-SWF.

Bevor wir uns dem Code widmen hier zunächst eine kleine Veranschaulichung, wie sich eine nachgeladene SWF im Verhältnis zu der ladenen verhält:

Man kann sich den Hauptfilm (Main.swf) als eine Wohnung vorstellen, in der man ein Zimmer anlegt - das wäre die nachzuladende SWF (Inhalt.swf). In diesem Zimmer kann passieren, was will, denn es gibt eine Tür, die zu ist und somit der Wohnung keinen Einblick über den Inhalt des Zimmers gewährt. Genau das gleiche gilt für Funktionen im Zimmer (wie z.B. Licht anmachen) - davon bekommt die Main.swf nichts mit, weil sie es genaugenommen auch garnicht interessiert. Es gibt aber natürlich die Möglichkeit, der Wohnung zu sagen "Hey, ich habe mein Licht angemacht" und natürlich genauso die Möglichkeit, den Inhalt des Zimmers zu verändern - schließlich ist es ein Teil der Wohnung selbst. Alles, was in dem Zimmer ist ist also im übertragenen Sinne auch in der Wohnung.

Schauen wir uns also erst einmal an, wie man auf Funktionen, MovieClips und Variablen der nachgeladenen SWF von der Main.swf zugreifen kann.

Actionscript:
  1. var _swfLoader:Loader;
  2. var _swfContent:MovieClip;
  3.  
  4. loadSWF("Inhalt.swf");
  5.  
  6. function loadSWF(path:String):void {
  7.     var _req:URLRequest = new URLRequest();
  8.     _req.url = path;
  9.  
  10.     _swfLoader = new Loader();
  11.     _swfLoader.contentLoaderInfo.addEventListener(Event.INIT, addSWF);
  12.     _swfLoader.load(_req);
  13. }
  14.  
  15.  
  16. function addSWF(event:Event):void {
  17.     _event.target.removeEventListener(Event.INIT, addSWF);
  18.  
  19.     _swfContent = event.target.content;
  20.     addChild(_swfContent);
  21. }

Dieses kurze Snippet lädt eine SWF namens Inhalt.swf und erst sobald der Ladevorgang fertig ist haben wir Zugriff auf den Inhalt. Wir legen uns also einen leeren MovieClip an (_swfContent), in dem wir mit der content-Eigenschaft des Loaders den Inhalt der SWF referenzieren. Von nun an ist unsere SWF also "erreichbar" mit _swfContent. Wenn ihr bereits einen MC auf der Bühne habt, der euer Container für den nachgeladenen Film sein soll (Bsp.-Name: SWFContainer) dann ändert einfach die letzte Zeile der addSWF-Funktion in:

Actionscript:
  1. SWFContainer.addChild(_swfContent);

Denn somit könnt ihr weiterhin mit der Referenz im Code arbeiten und habt auf der Bühne einen Container, der z.B. maskiert, animiert oder sonstiges sein kann. Ihr solltet jedoch immer einen leeren MovieClip erzeugen und damit den Content der geladenen SWF referenzieren. Dann habt ihr stets Kontrolle und Übersicht.

Nehmen wir also nun an, in der nachgeladenen SWF liegt ein MC namens "tischMC" auf der Bühne. In unserem Hauptfilm können wir einfach so darauf zugreifen:

Actionscript:
  1. _swfContent.tischMC.alpha = .5

Eine Funktion wird genauso behandelt:

Actionscript:
  1. _swfContent.lichtAnmachen();

Wichtig ist natürlich immer, dass der MovieClip / die Funktion in dem derzeitigen Schlüsselbild der Inhalt.swf auch vorhanden ist. Wird also eine Funktion erst später auf der Zeitleiste deklariert muss der Hauptfilm wissen, ab wann sie verfügbar ist. Und hier kommt das EventSystem von Flash zum Einsatz - dazu folgt im Laufe des Tages ein weiterer Artikel, den ich dann von hier aus verlinke.

Also, wie angekündigt: Aus externer SWF mit dem Hauptfilm kommunizieren

4 Antworten zu “Auf MovieClips & Funktionen externer SWFs zugreifen”

  1. [...] wir aufgeben und uns eine andere Variante hierzu überlegen. Diese ist auch recht schnell gefunden: http://www.beautifycode.de/auf-movieclips-funktionen-externer-swfs-zugreifen Hier wird beschrieben, wie man von der Main-Datei auf Funktionen und Movieclips aus einer [...]

Kommentar hinterlassen

Powered by WordPress | Free T-Mobile Phones for Sale | Thanks to Palm Pre Blog, Video Game Music and Get Six Pack Abs