rss twitter

Aus externer SWF mit dem Hauptfilm kommunizieren

Im letzten Artikel ging es darum, den Hauptfilm auf eine geladene SWF zugreifen zu lassen. Das ist insofern nützlich als wir z.B. eine Navigation im Hauptfilm haben, die beim Klick eine SWF lädt. Nun hat die Navigation auch noch Unterpunkte, die auch im Hauptfilm liegen. Beim Klick auf einen wird eine Funktion in der geladenen SWF aufgerufen, die dann selbst den Inhalt wechselt. Aber wie könnte man nun aus dieser heraus eine Funktion im Hauptfilm aufrufen oder sich Variablen holen? Die Antwort ist: am besten garnicht - klingt hart, aber gleich werdet ihr sehen, warum. :)

Wer den letzten Artikel noch kennt erinnert sich an das Beispiel mit der Wohnung (Hauptfilm) und dem Zimmer (geladene SWF). Die Wohnung kann z.B. den Tisch im Zimmer verschieben, weil er und das Zimmer schließlich Teil der Wohnung sind. Aber das Zimmer könnte nun nicht den Strom in der ganzen Wohnung am Hauptverteiler ausschalten, schließlich ist es "nur" ein Zimmer, was erstmal garnix mit den anderen Zimmern und drumherum zu tun hat. Es hat eben sein eigenes kleines Leben mit ein paar MovieClips, Funktionen wie z.B. Lichtanmachen und ein paar Eigenschaften.

Aber: das Zimmer ist nicht stumm - es kann der Wohnung sagen, dass es gerade das Licht angemacht hat. Dieses "bescheidgeben" wäre in Actionscript das dispatchen eines Events. Die Wohnung muss natürlich auch auf dieses Event hören - denn nur weil das Zimmer da ist heißt das nicht, dass sich die Wohnung dafür interessiert. Dieses "zuhören" ist, wie der Name vermuten lässt, ein EventListener.

Um endlich auf den Punkt zu kommen: die geladene SWF sagt dem Hauptfilm, dass sie gerne Infos hätte oder eine Funktion im Hauptfilm ausführen möchte. Sie tut & kann es nicht einfach so.

Laden wir also eine SWF im Hauptfilm (das Snippet kommt hierher):

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.  
  21.     // "hör" auf das event closeMe
  22.     _swfContent.addEventListener("closeMe", unloadSWF);
  23.     addChild(_swfContent);
  24. }
  25.  
  26. function unloadSWF(event:Event):void {
  27.     // ...
  28. }

So, der Hauptfilm achtet also auf das Event "closeMe", welches aus der SWF dispatched werden könnte und würde dann (bei sich selber) die unloadSWF Methode aufrufen. Bescheidgeben würde in der geladenen SWF so aussehen:

Actionscript:
  1. closeBtn.addEventListener(MouseEvent.CLICK, closeHandler);
  2.  
  3. function closeHandler(event:MouseEvent):void {
  4.     // hier kann ja erstmal alles abgebaut werden.
  5.  
  6.     // erstellt ein Event, das (sozusagen) "closeMe" heißt
  7.     var closeEvent:Event = new Event("closeMe", true);
  8.  
  9.     // und dispatched es.
  10.     dispatchEvent(closeEvent);
  11. }

Das Event wird dispatched, der Hauptfilm hört das und reagiert damit, bei sich die unloadSWF Funktion aufzurufen. So einfach ist das. :) Aber sorry - ist doch ein bißchen länger geworden, aber ich hoffe, es hat dem ein oder anderen geholfen.

3 Antworten zu “Aus externer SWF mit dem Hauptfilm kommunizieren”

  1. [...] 1)..darauf hin versuche ich dann auf eine Funktion des geladenen Swf aufzurufen …(Link 2) Aus externer SWF Funktionen im Hauptfilm aufrufen (AS3) | Beautify Code Blog Auf MovieClips & Funktionen von externen SWFs zugreifen | Beautify Code Blog ich bekomme aber [...]

Kommentar hinterlassen

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