Erzeugen von Movieclip-Instanzen in der Flash-Entwicklungsumgebung

In der Flash-Entwicklungsumgebung können Movieclips erzeugt werden, indem aus der Bibliothek ein Movieclip-Symbol mit der Maus auf die Bühne gezogen wird.
Voraussetzung ist daher, dass vorher in der Entwicklungsumgebung ein Movieclipsymbol erstellt wurde.

Konvention: Movieclipnamen mit großem Anfangsbuchstaben beginnen.

Das Element auf der Bühne ist nun eine Instanz der Klasse "Kreis", die in der Bibliothek abgelegt ist (die Instanz ist eine konkrete Realisierung des "Bauplans Kreis").

Sobald eine Instanz von einem Movieclip auf der Bühne platziert wurde, wird beim Erzeugen der swf-Datei der Movieclip (der "Bauplan") aus der Bibliothek automatisch in die swf-Datei integriert.

Um die Instanz später über ActionScript ansprechen zu können, soll man der Instanz einen Namen geben.

Konvention: Instanznamen mit kleinem Anfangsbuchstaben beginnen und bei Movieclips am Ende das Suffix _mc anhängen. So kann man schon am Namen erkennen, dass es sich um eine Movieclipinstanz handelt. Z.B.: kreis_mc

 

 

Erzeugen von Movieclip-Instanzen zur Laufzeit mit new

Es besteht auch die Möglichkeit, Movieclip-Instanzen zur Laufzeit zu erzeugen. Dabei kann man zwei Fälle unterscheide

  1. Ein Movieclip-Symbol wurde bereits erstellt und in der Bibliothek abgespeichert.
  2. Eine leere Instanz der Movieclip-Klasse (= leerer Container) wird  zur Laufzeit generiert und anschließend wird z.B. mit Hilfe der Graphics-Klasse die Grafik in den Movieclip-Container gezeichnet. Dieser Fall wird in diesem Modul nicht behandelt.

Im folgenden gehen wir davon aus, dass in der Bibliothek ein Movieclipsymbol abgespeichert ist.

Export für ActionScript

Wichtig ist nun, dass die Movieclip-Eigenschaft "Export für ActionScript" aktiviert wird.

Eigentlich wird eine Unterklasse der Klasse MovieClip erstellt, die alle Eigenschaften und Methoden eines Movieclips erbt und einen eigenen Namen bekommen muss. Der Name der in der Grafik bei "Klasse:" steht, ist der Name über den ActionScript die Klasse anspricht. Der Name ganz oben im Eigenschaftenfenster ist der Symbolname für die Bibliothek. In der Regel sind die beiden Namen identisch (muss aber nicht sein).

"Export für ActionScript" ist deshalb notwendig, weil beim Erstellen der swf-Datei normalerweise nur die Bibliothekselemente berücksichtigt werden, von denen Instanzen auf der Bühne liegen oder darin verwendet werden. Durch Aktivieren von "Export für ActionScript" wird erzwungen, dass die "Bauanleitung" aus der Bibliothek in die swf-Datei gepackt wird, obwohl noch keine Instanz auf der Bühne liegt.

Erzeugen der Instanz zur Laufzeit

Normalerweise wird zuerst eine Variable vom Typ MovieClip definiert, in der die Instanz abgespeichert wird, um später darauf zugreifen zu können. (Variable speichern Informationen, die man in der Zukunft einmal brauchen wird.)
Wieder die Konvention beachten: mit kleinem Anfangsbuchstaben beginnen.

var kreis_mc:MovieClip;

Anschließend wird eine Instanz der Klasse Kreis mit new erzeugt und in der Variablen kreis_mc abgespeichert.

kreis_mc = new Kreis();

Für Fortgeschrittene: Genau genommen wird die Konstruktormethode der Klasse aufgerufen. Eine Methode ist eine Funktion und daher die Klammern.

Natürlich kann man die zwei Zeilen zusammenfassen.

var kreis_mc:MovieClip = new Kreis();

Die Instanz ist nun erzeugt, aber wird noch nicht auf der Bühne angezeigt. Dazu muss sie noch zur Anzeigeliste des übergeordneten Containerobjekts hinzugefügt werden.

this.addChild(kreis_mc);

Jetzt ist der Kreis auf der Bühne zu sehen. Automatisch wird die Instanz im Ursprung des übergeordneten Containers platziert.Anschließend kann man die Eigenschaften z.B. x und y verändern damit der Kreis auf die Bühne zentriert ist.
this bezieht sich in diesem Fall auf die Maintimeline. Siehe Modul DisplayObject

kreis_mc.x = stage.stageWidth/2;
this.getChildAt(0).y = stage.stageHeight/2;
 
Die Änderungen der Eigenschaften x und y erfolgt auf zwei Arten, die im nachfolgenden Kapitel erklärt werden.
 

Ansprechen von Movieclip-Instanzen

Variante 1: Über den Instanznamen

Wenn man in der Flash-Entwicklungsumgebung der Instanz einen Namen gegeben hat, kann man über diesen Namen die Instanz ansprechen und Eigenschaften abrufen bzw. ändern und Methoden aufrufen.

Im nachfolgenden Video wird die Kreisinstanz mit dem Namen kreis_mc in der Bühnenmitte platziert.

kreis_mc.x = stage.stageWidth/2;
kreis_mc.y = stage.stageHeight/2;
 

 

 
Variante 2: Über die Anzeigeliste

Wenn kein Name zur Verfügung ist, aber die Instanz einem Container zugeordnet wurde, dann ist die Instanz teil der Anzeigeliste des Containers und kann darüber angesprochen werden.

Im nachfolgenden Beispiel ist nur ein Element im Container der Maintimeline, das über this.getChildAt(0) angesprochen werden kann. Damit kann man wieder die x und y-Eigenschaften ändern und die Instanz auf die Bühnenmitte zentrieren.

this.getChildAt(0).x = stage.stageWidth/2;
this.getChildAt(0).y = stage.stageHeight/2;