SWF-Dateien übergreifende Actionscripte

mmc-scream

Grünschnabel
Hallo erstmal!

Ich habe bei mir eine Preloader-SWF gemacht, der in sein MC immer ein anderes swf lädt. Jetzt würde ich gerne aus dem geladenen SWF heraus dem Preloader per Actionscript mitteilen, was er tun soll, also eine Funktion in dieser anderen SWF-Datei aufrufen.

Wie geht das?
 
Hi,

wo liegt denn der Preloader relativ zum geladen Film?

Meistens wäre das so etwas:
PHP:
_parent.machwas();
Wenn sich der Container direkt im Preloader-MC befindet.

Schlimmstenfalls probiers über _root:
PHP:
_root.der_preloader.machwas();

Gruß

P.S.: Du kannst natürlich den Preloader auch als globale Variable referenzieren:
PHP:
// Im Preloader:
_global.THE_PRELOADER = this;
PHP:
// und dann von irgendwo aus:
THE_PRELOADER.machwas();
.
 
_root greift ja nur auf die Toplevel-Ebene innerhalb einer SWF-Datei zu. Ich muss aber NOCH eine Ebene höher gehen, nämlich auf den MC, in den diese SWF-Datei geladen wurde (und von dort aus noch eins höher (auf Toplevel dieser SWF-Datei), aber das ist ja kein Thema dann).

Nochmal in anderen Worten: Ich habe zwei SWF-Dateien, SWF2 wurde in ein MC innerhalb von SWF1 geladen, und ich will von SWF2 aus was per Actionscript in SWF1 machen ;).
 
_root greift ja nur auf die Toplevel-Ebene innerhalb einer SWF-Datei zu
Falsch: _root spricht immer die oberste Ebene das Hauptfilms an (es sei denn, Du hast in Flash 7 _lockroot auf true für den Unterfilm gesetzt)..

Wenn Du den Unterfilm statt in einen Container in eine Stufe geladen hast, verwendest Du statt _root _level0, um die oberste Ebene des Hauptfilms anzusprechen.

Besser ist es allerdings, mit relativen Pfaden zu arbeiten.

Gruß
.
 
Macht nichts. Das ist interessanterweise eine Fehleinschätzung, die vielen unterläuft: Oft werden hier Probleme gepostet, die daraus resultieren, dass jemand eine Vorlage, die mit _root arbeitet, vergeblich in einem Container zum Laufen bekommen versucht. ... erst mit Version 7 hat Macromedia mit der _lockroot-Eigenschaft dafür gesorgt, dass man diese Probleme teilweise umgehen kann.

Der Vollständigkeit zähle ich noch einmal auf, wie man mit absoluten Verweisen umgehen sollte:
  • ausschliesslich relative Pfade verwenden:
PHP:
_parent._parent.clip2.clip2.machwas();
  • globale Variablen anlegen, um Verweise auf lokale Hauptebenen zu bekommen:
PHP:
_global.component_root = this;
  • Nur Flashplayer 7: Root für einzelne Unterfilme sperren:
PHP:
this._lockroot = true;
In einem Film, in dem dieser Flag gesetzt ist, bezieht sich _root immer auf die Hauptebene dieses Films, egal ob er extern eingeladen wurde.

Gruß
.
 
Zurück