Flash: Movieclips dynamisch erzeugen
In häufigen Fällen wird die im Authoring-Modus auf der Bühne platzierte Menge von Movieclips nicht den Anforderungen eines Filmprojekts gerecht, so dass es erforderlich wird, Movieclipinstanzen dynamisch zur Laufzeit zu erzeugen. Derartig erzeugte Movieclips sind stets Unterknoten (childs) eines übergeordneten Movieclips (parent). Bei Verwendung etwaig noch vorhandener Aktionen ist dies zwingend der Movieclip, in dessen Zeitleiste die Aktion notiert wurde. Bei Verwendung der nach neuerem Modell dazu zur Verfügung stehenden Methoden des Movieclip-Objekts ist dies jedoch der Movieclip, dessen Zielpfad davor notiert wird. Letztere Art und Wiese bringt den Vorteil mit sich, dass dynamisch erzeugte Instanzen auch beliebigen anderen auf der Bühne vorhandenen Movieclips angehängt werden können.Movieclips können im Allgemeinen mithilfe unterschiedlicher Verfahrensweisen dynamisch erzeugt werden.
Leere Movieclips erzeugen
Eine leere Movieclipinstanz wird durch die MethodecreateEmptyMovieClip(Instanzname, Tiefe)
des Movieclip - Objekts erzeugt, wobei sie hierarchisch dem Movieclip, dessen Zielpfad vor dem Methodenbezeichner notiert wurde, untergeordnet ist. Die Positionierung der so hinzufügten Instanz, deren Namen durch den ersten Parameter festgelegt wird, erfolgt relativ und wird an der oberen linken Ecke des Elternobjekts ausgerichtet. Mit dem zweiten Parameter von createEmptyMovieClip
definiert man die Ebenentiefe, d.h. die Nummer der Ebene in der Zeitleiste des Elternmovieclips, in der die Instanz diesem angehängt werden soll. Ein Beispiel:
_root.myMovieClip.createEmptyMovieClip("newMovieClip",5);
In diesem Beispiel wird in Ebene 5 der Zeitleiste des MovieclipsmyMovieClip
eine neue leere Movieclipinstanz mit dem Namen newMovieClip
erzeugt. Sie überdeckt nach dem bereits erläuterten Prinzip der transparenten Ebenen (wie Folien) alles, was in der Ebenenhierarchie (Ebene 1 - 4) unter ihr liegt.
Auf der Bühne vorhandene Movieclips vervielfachen
Möchte man Movieclips auf der Bühne des Films während dessen Wiedergabe dynamisch vervielfachen, muss man dazu die MethodeduplicateMovieClip(Vorlagenname, Instanzname, Tiefe)
des Movieclip - Objekts verwenden. Der Parameter Vorlagenname
entspricht dabei dem Zielpfad des zu duplizierenden Movieclips (im Prinzip Vorlage), Instanzname
dem Namen der zu erzeugenden Instanz und Tiefe
wieder der Ebenentiefe in der Zeitleiste des Elternmovieclips. Auf diese Weise erzeugte Movieclipinstanzen werden stets ab dem ersten Bild ihrer Zeitleiste abgespielt, auch, wenn die Wiedergabe des übergeordneten Movieclips sich in einem anderen Bild befindet. Wird dieser Elternmovieclip entfernt, so wird auch die dynamisch mit duplicateMovieClip
erzeugte Instanz gelöscht. Ein Beispiel:
_root.duplicateMovieClip("_root.myMovieClip","newMovieClip",5);
Hier wird im Movieclip des Wurzelknotens (_root
) ein Movieclip namens myMovieClip
im Unterknoten dupliziert, wobei das Duplikat, d.h. die so erzeugte Instanz, den Bezeichner newMovieClip
erhält. Die neue Movieclipinstanz wird dabei in der Ebene 5 der Zeitleiste des übergeordneten Movieclips angehängt.Eine noch existierende, jedoch verhältnismäßig veraltete, Aktion
duplicateMovieClip("_root.myMovieClip","newMovieClip",5)
führt zum selben Ergebnis, wobei hier die Instanz nur dem Movieclip angehängt werden kann, in dessen Zeitleiste die Anweisung notiert ist. Ein zu obigem analoges Beispiel:
duplicateMovieClip("_root.myMovieClip","newMovieClip",5);
Symbole der Bibliothek dynamisch instanzieren
Instanzen von Symbolen jeder Art aus der Bibliothek können nur dann mit ActionScript dynamisch erzeugt werden, wenn diese Symbole eine Verknüpfung mit ActionScript erlauben. Andernfalls sind sie für ActionScript nicht sichtbar, da für sie kein Verknüpfungsname existiert.Um diese Verknüpfung zu gewährleisten, muss man in den Verknüpfungseigenschaften eines Symbols den Export für ActionScript freigeben und einen entsprechenden Symbolbezeichner für ActionScript definieren. Dies kann in der Maske während der Erzeugung des Symbols und den entsprechenden Dialog aus dessen Kontextmenü in der Bibliothek erfolgen.
Mithilfe der Methode
attachMovie(Verknüpfungsname, Instanzname, Tiefe [, Vorlagenname])
des Movieclip - Objekts kann eine neue Instanz eines Bibliotheksymbols dynamisch zur Laufzeit erzeugt werden. Der erste erwartete Parameter dieser Methode entspricht dem eben erläuterten Bezeichner des Symbols für dessen Export in ActionScript . Instanzname
beschreibt den neuen Namen der Instanz, welche dem übergeordneten Movieclip in der Ebene der entsprechenden Tiefe Tiefe
aus dem dritten Parameter angehängt wird. Mit dem letzten Parameter Vorlagenname
kann zudem optional der Bezeichner eines Objekts übergeben werden, dessen Eigenschaften die zu erzeugende Instanz erben soll. Folgendes Beispiel zeigt dies:
myObject = new Object();
myObject.var1 = 1;
myObject.var2 = "String";
_root.attachMovie("mySymbol","newMovieClip",5,myObject);
myObject
erzeugt und anschließend werden zwei Objektvariablen var1
und var2
initialisiert. Mit der vierten Anweisung wird im Movieclip des Wurzelknotens (_root
) eine neue Movieclipinstanz namens newMovieClip
vom Bibliothekensymbol mySymbol
im Unterknoten erzeugt, wobei diese dabei in der Ebene 5 der Zeitleiste des übergeordneten Movieclips angehängt wird. Da als vierter Parameter der Methode attachMovie
der Bezeichner des anfangs erzeugten Objekts myObject
übergeben wurde, erbt die Instanz newMovieClip
dessen Eigenschaften:
trace(_root.newMovieClip.var2);
//Gibt "String" im Fenster aus
attachSound("Verknüpfungsname")
des Movieclip - Objekts können zudem Soundsymbole der Bibliothek instanziert werden. Der erwartete Parameter dieser Methode entspricht dem Bezeichner eines Sound-Symbols für dessen Export in ActionScript . Zuvor muss jedoch eine neue Instanz des Objekts Sound
erzeugt werden. Dem Konstruktor new Sound([Zielpfad])
kann dabei optional der Zielpfad eines Movieclips übergeben werden, welchem die Soundobjektinstanz angehangen werden soll. Wird darauf verzichtet, steuert die Instanz des Sound-Objekts sämtliche Sounds im Flash film. Ein Beispiel:
mySound = new Sound(myMovieClip);
mySound.attachSound("mySoundSymbol");
mySound.start();
mySound
für den Movieclip myMovieClip
erzeugt, welchem in der folgenden Anweisung der Sound des Bibliothekensymbols mySoundSymbol
hinzugefügt wird. Anschließend wird die Wiedergabe der Sound-Instanz gestartet.
Dynamisch erzeugte Instanzen aus Hierarchie entfernen
Movieclipinstanzen, welche mit der Methode oder AktionduplicateMovieClip
bzw. der Methode attachMovie
erzeugt wurden, können mithilfe der Methode removeMovieClip
des MovieClip - Objekts wieder gelöscht werden. Es wird hierbei nicht nur der Bühneinhalt der Instanz, sondern auch ihr die Gesamtheit ihrer Eigenschaften gelöscht. Folgende Anweisung würde also die im vorigen Beispiel erzeugte Movieclipinstanz newMovieClip
wieder komplett löschen:
_root.myMovieClip.removeMovieClip();
Des Weiteren existiert in ActionScript noch eine eher veraltete AktionremoveMovieclip
, welche als Parameter den Zielpfad der zu löschenden Instanz erwartet, jedoch genau das gleiche bewirkt und auch nur auf nach oben erläutertem Prinzip erzeugte Instanzen angewandt werden kann. Ein analoges Beispiel:
removeMovieClip(_root.myMovieClip);
Inhalte verteilen: Externe Inhalte dynamisch in einen Flashfilm laden
Flash unterstützt eine große Bandbreite an Importmöglichkeiten für (Multimedia-) Formate. Dazu zählen zahlreiche Vektor- und Bitmapgrafikformate (z.B.: Adobe Illustrator (AI), (PNG), Bitmap, GIF, TIF, JPEG, PSD, usw.), Videoformate (z.B.: AVI, MPEG, MOV, WMV, usw.) und Audioformate (z.B.: MP3, WMA, WAV, usw.), um nur einige zu nennen.Einige dieser Formate können darüber hinaus auch dynamisch mit ActionScript eingebunden werden. Der bereits im Kapitel "Hierarchie eines Flash films" angesprochene Aspekt der Verteilung von Inhalten auf mehrere Flash filme, um damit den Speicherbedarf eines Flash films zu minimieren, kommt bei Verwendung der hier erwähnten Methoden bzw. Aktionen zum Tragen.
Grafiken und Videos dynamisch einbinden
Mithilfe der MethodeloadMovie("URL" [, Variablen])
des Movieclip- Objekts können JPEG-Bilder und SWF-Filme dynamisch zur Laufzeit importiert werden. Je nachdem, ob man den Zielpfad einer Movieclipinstanz oder eine Stufe des Flash players (_levelX
) angibt, wird entweder der existierende Movieclip mit dem entsprechenden Zielpfad ersetzt oder das zu importierende Medium in die angegebene Stufe des Flash players geladen.Mit dem ersten Parameter
URL
muss man die absolute oder relativeURLfür das zu ladende Medium übergeben, wobei sich dieses in derselben Subdomain wie der Flash films, welcher das Medium importieren soll, befinden muss. Der relative Pfad muss stets relativ zum Flash film in _level0
angegeben sein. Einem einzubindenden Flash film kann mit dem letzten optionalen Parameter
Variablen
zusätzlich noch eine Methode (POST oder GET) angegeben werden, mit welcher diesem Variablen übergeben werden. Bei Verwendung der Methode GET werden die Variablen am Ende derURLnach einem Fragezeichen (?
) und bekanntem Codierungsverfahren angehängt, wobei bei POST die Variablen in einem neuen HTTP-Header übertragen werden. Ein Beispiel:
myString = "String";
_level5.loadMovie("src/otherMovie.swf", "GET");
_level5
) geladen. Der letzte Parameter gibt zudem an, dass die Variablen des Flash films in die Zeitleiste des zu importierenden Films mit der Methode GET übertragen werden sollen. Auf diese Weise stehen diese dort direkt zur Verfügung. Die so zusammengesetzteURLwürde dann src/otherMovie.swf?myString=hallo lauten.Diese Methode ersetzt seit Einführung von Flash MX die beiden Aktionen
loadMovie("URL", Stufe/Zielpfad [, Variablen])
bzw. loadMovieNum("URL", Stufe [, Variablen])
.
Sounds dynamisch importieren
Sounds können in ActionScript können mit den Methoden des Sound-Objekts gesteuert werden, so dass man vor dem Einbinden von Sounddateien zunächst eine solche Instanz erzeugen muss. Mit der MethodeloadSound("URL", isStream)
des Sound-Objekts können MP3-Dateien dynamisch importiert werden, wobei der erste Parameter die relative oder absoluteURLder zu ladenden Datei angibt. Das Parameter isStream
muss ein boolescher Wert sein und gibt an, ob es sich um den zu importierenden Sound um einen Stream- (bei Wert true
) oder einen Ereignis-Sound (bei Wert false
) handelt. Ein Beispiel:
mySound = new Sound(myMovieClip);
mySound.loadSound("src/sound.mp3",false);
mySound
im Movieclip myMovieClip
erzeugt. In diese wird dann dynamisch die MP3-Datei mit dem Pfad src/sound.mp3 geladen, welche sich laut zweitem Parameter von loadSound
um einen Ereignis-Sound handelt, also erst nach dessen vollständigem Einladen wiedergegeben werden kann.Um eine Instanz des Sound-Objekts zu steuern, muss man dessen Eigenschaften und Methoden verwenden, welche in der Flash beiliegenden Referenz aufgeführt sind.
Dynamisch geladene Movieclips löschen
Die MethodeunloadMovie()
des Movieclip - Objekts löscht Movieclips, welche mit loadMovie
in den Flash film geladen wurden. Des Weiteren können auch Movieclips, welche mit attachMovie
von Symbolen der Bibliothek instanziert wurden, auf diese Weise gelöscht werden. Hierbei wird allerdings nicht wie bei removeMovieClip
die gesamte Instanz, sondern nur deren Inhalt gelöscht, so dass diese mit ihren Eigenschaften vorhanden bleibt. Oben geladener Film auf Stufe 5 des Flash films müsste so gelöscht werden:
_level5.unloadMovie();
Es existieren des Weiteren noch die AktionenunloadMovie (Stufe/Zielpfad)
sowie unloadMovieNum(Stufe)
zum Löschen mit entsprechender Aktion (loadMovie
bzw. loadMovieNum
) geladener Movieclips.
Du arbeitest in einer Agentur oder als Freelancer?
Dann wirf doch mal einen Blick auf unsere Software FeatValue.
Weiterlesen: ⯈ LiveConnect: Das Zusammenspiel von JavaScript und ActionScript
Über uns

Wir entwickeln Webanwendungen mit viel Leidenschaft. Unser Wissen geben wir dabei gerne weiter. Mehr über a coding project