Drei Methoden zum Erzeugen von Movieclips

Ergebnis der swf-Datei


Jede Wellenlinie wurde in einem eigenen Movieclip gezeichnet. Jeder Movieclip wurde mit einer anderen Methode erzeugt.

Der Programmcode mit Kommentar ohne Erklärungen

Kommentare sind im nachfolgenden Code grau geschrieben.

// ZEICHNEN EINER WELLENLINIE IN EINEM MOVIECLIP MIT DREI VERSCHIEDENEN METHODEN
/*
1. METHODE MIT createEmptyMovieClip
Zeichnen der Wellenlinie in einem eigenen neuen Movieclip welle1_mc
*/
// Erzeugen des leeren Movieclips welle1_mc auf der Ebene 1
createEmptyMovieClip("welle1_mc", 1);
// Ausgangspunkt der Kurve festlegen im ersten Viertel der Bühnenhöhe
var point:Array = [0, Stage.height/4];
// Zeichnen der roten Gesamtkurvenfunktion mit baseCurve als Basiskurvenfunktion im Movieclip welle1_mc
curve(welle1_mc, baseCurve, point, 45, 100, 1, 0xFF0000);
/*
2. METHODE MIT attachMovie
Das Symbol muss vorher in der Autorenumgebung von Flash erzeugt und für ActionScript exportiert werden.
Das Symbol hat den Namen "EmptyClip".
*/
// Das Symbol "EmptyClip" wird dem neuen MovieClip welle2_mc zugeordnet, der auf Ebene 2 liegt.
attachMovie("EmptyClip", "welle2_mc", 2);
// Ausgangspunkt der Kurve festlegen in der Mitte der Bühnenhöhe
point = [0, Stage.height/2];
// Zeichnen der grünen Gesamtkurvenfunktion mit baseCurve als Basiskurvenfunktion im Movieclip welle2_mc
curve(welle2_mc, baseCurve, point, 45, 100, 1, 0x00FF00);
/*
3. METHODE: Symbol "EmptyClip" in der Autorenumgebung von Flash als Instanz auf den Bühnenursprung ziehen.
Dadurch ist die Position definiert. Die MovieClip-Instanz bekommt den Namen welle3_mc.
*/
// Ausgangspunkt der Kurve festlegen im dritten Viertel der Bühnenhöhe
point = [0, 3*Stage.height/4];
// Zeichnen der blauen Gesamtkurvenfunktion mit baseCurve als Basiskurvenfunktion im Movieclip welle3_mc
curve(welle3_mc, baseCurve, point, 45, 100, 1, 0x0000FF);
/*
Definieren der Funktionen curve() und baseCurve() mit Parametern
*/
function curve(mc:MovieClip, bc:Function, pt:Array, a:Number, b:Number, lineWidth:Number, lineColor:Number):Void {
   mc.lineStyle(lineWidth, lineColor);
   mc.moveTo(pt[0], pt[1]);
   do {
      pt = bc(mc, pt, a, b);
   } while (0<=pt[0] && pt[0]<Stage.width && 0<=pt[1] && pt[1]<Stage.height);
}
function baseCurve(mc:MovieClip, pt:Array, a:Number, b:Number):Array {
   mc.curveTo(pt[0]+a/4, pt[1]-b/2, pt[0]+a/2, pt[1]);
   mc.curveTo(pt[0]+3*a/4, pt[1]+b/2, pt[0]+a, pt[1]);
   pt[0] = pt[0]+a;
   return pt;
}

Der Programmcode mit Erklärungen

1. Methode mit createEmptyMovieClip

Die Methode createEmptyMovieClip(name:String, depth:Number): MovieClip
erstellt einen leeren Movieclip, der einem vorhandenen Movieclip untergeordnet ist. Der Registrierungspunkt für den neuen leeren Movieclip ist die linke obere Ecke des Movieclips in dem der neue erzeugt wurde.
Der Parameter name vom Typ String ist der Instanznamen des neuen Movieclips. Der Parameter depth vom Typ Number ist eine Ganzzahl zur Angabe der Tiefenebene des neuen Movieclips.
Movieclips werden innerhalb eines übergeordneten Movieclips übereinandergelegt und durchnummeriert.
Der Moveiclip mit der Tiefe 1 liegt dabei ganz unten, aber über allen Ebenen, die in der Flash-Entwicklungsumgebung angelegt wurden.
Der Rückgabewerte der Methode liefert eine Referenz auf die neu erstellte Movieclip-Instanz.

createEmptyMovieClip("welle1_mc", 1);
var point:Array = [0, Stage.height/4];
curve(welle1_mc, baseCurve, point, 45, 100, 1, 0xFF0000);

Im obigen Fall wird im Mainmovie ein neuer leerer Movieclip mit dem Namen welle1_mc und der Tiefe 1 angelegt. Im Mainmovie deshalb, weil das Script im ersten Frame der Timeline des Mainmovies plaziert ist.
Da der neue Movieclip welle1_mc nicht extra positioniert wurde, ist sein Ursprung in der linken oberen Ecke des Mainmovies. Deshalb wurde der Startpunkt der Kurve, die in dem neuen Movieclip gezeichnet wird, relativ zur Bühnenhöhe definiert

Namenskonvention: Movieclipnamen sollten zur besseren Lesbarkeit immer mit _mc enden.

Automatische Auswahl der Moviecliptiefe

Wenn man einen Movieclip mit einer konkreten Tiefe erzeugt, kann es passieren, dass ein Movieclip mit dieser Tiefe bereits existiert und dadurch "überschrieben" wird. Denn es kann pro Tiefe nur einen Movieclip geben.
Um das zu verhindern, sollte man die Methode getNextHighestDepth() verwenden, die die nächste noch nicht vergebene Tiefe im übergeordneten Movieclip liefert.

// Erzeugen des leeren Movieclips welle1_mc auf der nächsten freien Ebene
createEmptyMovieClip("welle1_mc", this.getNextHighestDepth());

Positionierung von Movieclips

Über die Movieclipeigenschaften _x und _y kann man den Ursprung (Registrierungspunkt) eines Movieclips relativ zum Ursprung des übergeordneten Movieclips positionieren.
Wir können daher alternativ zum obigen Beispiel den Ursprung des Movieclips welle1_mc auf das erste Viertel der linken Bühnekante festlegen und die Kurve innerhalb des neuen Movieclips von dessen Ursprung wegzeichnen.

createEmptyMovieClip("welle1_mc", this.getNextHighestDepth());
// Movieclipursprung auf das erste Viertel der Bühnenhöhe festlegen
welle1_mc._x = 0;
welle1_mc._y = Stage.height/4;
// Zeichnen der roten Gesamtkurvenfunktion im Ursprung des Movieclips welle1_mc
curve(welle1_mc, baseCurve, [0, 0], Stage.width, 45, 100, 1, 0xFF0000);

2. Methode mit attachMovie

Die Methode attachMovie(id:String, name:String, depth:Number): MovieClip
verknüpft ein Symbol aus der Bibliothek mit dem neuen Movieclip.
Der Parameter id vom Typ String ist der Verknüpfungsname des Movieclip-Symbols in der Bibliothek, das einem Movieclip auf der Bühne zugewiesen werden soll. Das ist der Name, den man im Dialogfeld Verknüpfungseigenschaften im Feld Bezeichner eingibt.
Der Parameter name vom Typ String ist der eindeutige Instanzname für den neuen Movieclip und depth gibt wieder die Tiefenebene des Movieclips an.
Der Rückgabewerte der Methode liefert eine Referenz auf die neu erstellte Movieclip-Instanz.

attachMovie("EmptyClip", "welle2_mc", 2);
point = [0, Stage.height/2];
curve(welle2_mc, baseCurve, point, 45, 100, 1, 0x00FF00);

Im obigen Fall wird im Mainmovie ein neuer Movieclip mit dem Namen welle2_mc und der Tiefe 2 angelegt und mit dem Symbol EmptyClip aus der Bibliothek verknüpft.
Da der neue Movieclip welle2_mc nicht extra positioniert wurde, ist sein Ursprung wieder in der linken oberen Ecke des Mainmovies. Deshalb wurde der Startpunkt der Kurve, die in dem neuen Movieclip gezeichnet wird, relativ zur Bühnenhöhe definiert.

Damit die Verknüpfung zu einem Symbol der Bibliothek möglich ist, muss dieses in der Autorenumgebung von Flash über den Menüpunkt Einfügen > Neues Symbol ... (Strg+F8) erzeugt werden.
Wichtig ist dabei die Aktivierung der Verknüpfung Export für ActionScript.
Das Symbol mit dem frei gewählten Namen EmptyClip liegt anschließend in der Bibliothek, ist leer, d.h. enthält keine Grafikelemente und kann über attachMovie verknüpft werden.

   

Variation bei Auswahl der Moviecliptiefe und Positionierung des Movieclips

attachMovie("EmptyClip", "welle2_mc", this.getNextHighestDepth());
// Movieclipursprung auf das erste Viertel der Bühnenhöhe festlegen
welle2_mc._x = 0;
welle2_mc._y = Stage.height/2;
// Zeichnen der grünen Gesamtkurvenfunktion im Ursprung des Movieclips welle2_mc
curve(welle2_mc, baseCurve, [0, 0], Stage.width, 45, 100, 1, 0x00FF00);

3. Methode: Plazieren des leeren Symbols auf der Bühne in der Flashautorenumgebung

Bei dieser Methode wird das leere Symbol "EmptyClip" in der Autorenumgebung von Flash aus der Bibliothek als Instanz auf die Bühne gezogen.
Dadurch ist die Position definiert. Die MovieClip-Instanz bekommt in der Eigenschaften-Palette einen eindeutigen Namen.

// Ausgangspunkt der Kurve festlegen im dritten Viertel der Bühnenhöhe
point = [0, 3*Stage.height/4];
// Zeichnen der blauen Gesamtkurvenfunktion mit baseCurve als Basiskurvenfunktion im Movieclip welle3_mc
curve(welle3_mc, baseCurve, point, 45, 100, 1, 0x0000FF);

Im obigen Fall wurde das Symbol auf den Bühnenursprung gezogen. Daher wird der Startpunkt der Kurve auf 3/4 der linken Bühnenkante gesetzt.
In der Eigenschaftenpalette bekommt die leere Movieclipinstanz den Namen welle3_mc und muss daher nicht mehr in ActionScript definiert werden.

Die Instanz wurde in einer eigenen Ebene im Frame 1 des Mainmovies abgelegt. Daher ist eine Angabe der Tiefe ist nicht notwendig, da dieser Clip jetzt in einer Ebene der Flash-Autorenumgebung liegt.

Variation bei der Positionierung des Movieclips

Das Symbol wurde auf 3/4 der linken Bühnenkante gesetzt. Das ist daher der Ursprung von welle3_mc und somit kann die Kurve im Punkt (0|0) starten.

// Zeichnen der blauen Gesamtkurvenfunktion im Ursprung des Movieclips welle3_mc
curve(welle3_mc, baseCurve, [0, 0], Stage.width, 45, 100, 1, 0x0000FF);