Die Klasse DisplayObject und ihre untergeordneten Objekte

ActionScript 3.0 ist eine konsequent objektorientierte Programmiersprache. D.h. alle Elemente mit denen man als ProgrammiererIn arbeitet sind Objekte mit bestimmetn Eigenschaften und Methoden. Manche Objekte können auch bestimmte Ereignisse auslösen bzw. auf Ereignisse regieren.
Die Klassendefinition enthält den "Bauplan" eines Objekts, oft auch blueprint (Blaupause) genannt. Eine konkrete "Realisierung" nach diesem Bauplan wird als Instanz bezeichnet. Jede Instanz hat einen eindeutigen Identifier. Man kann grundsätzlich beliebig viele Instanzen von einer Klasse erzeugen.

Ein wesentliches Merkmal einer objektorientierten Sprache ist das Konzept der Vererbung. D.h. man kann ausgehend von einer Klassendefinition eines Ojekts (in der eben die Eigenschaften und Methoden definiert werden) Unterobjekte definieren, die die Eigenschaften und Methoden des übergeordneten Objekts übernehmen, zum Teil auch überschreiben und vor allem aber erweitern. Unterobjekte sind immer eine Verfeinerung, eine Spezialisierung von allgemeineren übergeordneten Objekten.

Das allgemeinste, oberste Objekt in ActionScript 3.0 ist das Objekt Object. Die Object-Klasse ist das Stammelement der ActionScript-Klassenhierarchie. Ein wichtiger Teil in dieser Klassenhierachie sind die Objekte, die für den visuellen Output im Flash Player verantwortlich sind. Ohne diese Objekte würden wir nichts anschauen können. Die DisplayObject-Klasse ist die Basisklasse für alle visuellen Objekte, die in die Anzeigeliste eingefügt werden können. Die Anzeigeliste verwaltet alle Objekte, die im Flash Player angezeigt werden.

Klassenhierachie mit der Klasse DisplayObject als übergeordnete Basisklasse:
 

Die Klassen in den abgerundeten Rechtecken werden nicht dirket verwendet. Sie sind abstrakte Klasse, in denen die wesentlichen gemeinsamen Eigenschaften und Methoden definiert sind, die in den davon abgeleiteten konkreten Unterklassen verwendet werden.

Die Klasse DisplayObject:

Die Klasse DisplayObject enthält die Eigenschaften und Methoden, die für alle Anzeigeobjekte gelten.

Die wichtigsten Eigenschaften, die man sehr oft benötigt, sind gelb unterlegt und werden hier kurz beschrieben:

x und y
geben die x- und y-Koordinate der DisplayObject-Instanz relativ zu den lokalen Koordinaten des übergeordneten DisplayObjectContainer-Objekts an. Durch Veränderung der x- und y-Werte in der Zeit können Displayobjekte bewegt werden.
Durch die Methode localToGlobal() können die x-und y-Koordinaten
von den (lokalen) Koordinaten des Anzeigeobjekts in die (globalen) Bühnenkoordinaten konvertiert werden. Das ist nur relevant, wenn das Anzeigeobjekt in einem DisplayObjectContainer "steckt", der nicht die Bühne ist. Das Thema "Container" wird weiter unten behandelt.

rotation, scaleX und scaleY ermöglichen das Transformieren von Anzeigeobjekten.
Über die Eigenschaft rotation lässt sich ein Objekt rotieren. Der Wert gibt die Drehung der DisplayObject-Instanz ausgehend von der ursprünglichen Ausrichtung in Grad an. Werte zwischen 0 und 180 geben eine Rechtsdrehung, Werte zwischen 0 und -180 eine Linksdrehung an.
scaleX und scaleY geben die horizontale bzw. vertikale Skalierung des Objekts ausgehend vom Registrierungspunkt an. Der Standardregistrierungspunkt liegt bei (0,0). 1,0 entspricht 100 % Skalierung.

width und height
geben die Breite und Höhe des Anzeigeobjekts in Pixel an. Die Breite und Höhe werden auf Basis des Begrenzungsrechtecks des Anzeigeobjekts berechnet. Wenn man die Eigenschaft width und height festsetzt, werden die Eigenschaften scaleX und scaleY entsprechend angepasst und umgekehrt.

visible
ermöglicht es, ein Anzeigeobjekt auf sichtbar oder unsichtbar zu setzen.

alpha
gibt den Transparenzwert des Anzeigeobjekts an. Die zulässigen Werte liegen zwischen 0 (völlig transparent) und 1 (völlig undurchsichtig).

stage
liefert die Bühne des Anzeigeobjekts. Genauer: den Verweis auf die einzige Instanz des Stage-Objekts in der Flash-Anwendung, denn jede Flash-Anwendung besitzt nur ein Stage-Objekt.Wenn jedoch ein Anzeigeobjekt nicht in die Anzeigeliste aufgenommen wird, ist seine stage-Eigenschaft auf null gesetzt.

mouseX und mouseY
liefern die x- und y-Koordinate der Mausposition in Pixel relativ zum Registrierungspunkt des Anzeigeobjekts. Diese Eigenschaften können nur gelesen, aber nicht verändert werden. Somit kann man über stage.mouseX und stage.mouseY in jedem Anzeigeobjekt die Mauskoordinaten relativ zum Bühnenursprung in der linken oberen Ecke abrufen, denn stage liefert die Bühneninstanz und relativ dazu werden die Mauskkoordinaten errechnet.
 

Klassen, die unmittelbar von der Klasse DislayObject abgeleitet sind:

Unmittelbar von der Klasse DisplayObject abgeleitet sind die konkreten Klassen Shape, Bitmap und Video. Diese drei Klassen beschreiben Anzeigeobjekte, die KEINE Interaktivität mit den BenutzerInnen ermöglichen und ausschließlich für die nicht interaktive Darstellung von Vektorgrafik, Pixelgrafik und Videoinhalten benutzt werden.

Mithilfe der Klasse Shape können Vektorgrafikformen erstellt werden. Die Klasse enthält eine Eigenschaft graphics, mit der man auf Methoden der Klasse Graphics zugreifen kann, die für das Erstellen von Vektorformen benötigt werden.

Die Klasse Bitmap repräsentiert Anzeigeobjekte, die Pixelgrafik darstellen. Dabei kann es sich um Bilder handeln, die mit der Loader-Klasse geladen oder direkt mit ActionScript erstellt werden.

Mithilfe der Klasse Video kann man Flash Video-Dateien (FLV-Dateien) über HTTP oder das lokale Dateisystem und Live-Streaming-Videos wiedergeben.

Zusätzlich leitet sich die abstrakte Klasse InteractiveObject unmittelbar von der Klasse DisplayObject ab. Die InteractiveObject-Klasse ist die abstrakte Basisklasse für alle Anzeigeobjekte, mit denen BenutzerInnen per Maus und Tastatur interagieren können.
Diese Klasse wird im nächsten Kapitel genauer erklärt.

Die Klasse InteractiveObject

Die Klasse InteractiveObject:

Die InteractiveObject-Klasse ist die abstrakte Basisklasse für alle Anzeigeobjekte, mit denen Benutzer per Maus und Tastatur interagieren können und leitet sich unmittelbar von der DisplayObject-Klasse ab.

Die wichtigsten Ereignisse, die man sehr oft benötigt, sind gelb unterlegt und werden ausgelöst, wenn im Flash Player-Fenster die Maus über einer InteractiveObject-Instanz bewegt oder eine Taste der Maus bzw. der Tastatur betätigt wird.

Die Eigenschaft mouseEnabled gibt an, ob die InteractiveObject-Instanz Meldungen von der Maus empfangen kann oder nicht. Diese Eigenschaft lässt sich auf true oder false setzen.

Da die InteractiveObject-Klasse eine abstrakte Klasse ist, können erst die davon abgeleiteten konkreten Klassen genützt werden.
 

Klassen, die unmittelbar von der Klasse InteractiveObject abgeleitet sind:

 

Unmittelbar von der Klasse InteractiveObject abgeleitet sind die konkreten Klassen TextField und SimpleButton. Diese zwei Klassen beschreiben Anzeigeobjekte, die Interaktivität mit den BenutzerInnen ermöglichen und KEINE Containerobjekte sind.

Mithilfe der Klasse TextField können Anzeigeobjekten für die Texteingabe und -anzeige erstellt werden. Alle dynamischen Textfelder, die zur Laufzeit ihren Textinhalt ändern können und Eingabetextfelder, in die die BenutzerInnen zur Laufzeit Text eingeben können, sind Instanzen der TextField-Klasse. Dynamischer Text und Eingabetext lassen sich auch in der Flash-Autorenumgebung erstellen.

Die Klasse SimpleButton ermöglicht die Steuerung aller Instanzen von Schaltflächensymbolen, nachdem diese in der Authoring-Umgebung von Flash erstellt wurden.

Zusätzlich leitet sich die abstrakte Klasse DisplayObjectContainer unmittelbar von der Klasse InteractiveObject ab. Die DispalyObjectContainer-Klasse ist die Basisklasse für alle Objekte, die als Anzeigeobjekt-Container eingesetzt werden können. Was Container bedeutet, wird im nächsten Kapitel genauer erklärt.

Die Klasse DisplayObjectContainer, addChild und removeChild

Jedes Anzeigeobjekt, das im Flash Player-Fenster zu sehen sein soll, muss in der Anzeigeliste (Displaylist) aufgelistet sein.
Die Anzeigeliste selbst ist hierachisch geschachtelt aufgebaut. Damit dieser hierachische Aufbau möglich ist, benötigt man die Klasse DisplayObjectContainer.
 

Die Klasse DisplayObjectContainer:

Die abstrakte DispalyObjectContainer-Klasse ist die Basisklasse für alle Objekte, die als Anzeigeobjekt-Container eingesetzt werden können. Alle Klassen, die ihre Eigenschaften und Methoden von der Klasse DisplayObjectContainer erben, besitzen die Fähigkeit beliebig viele DisplayObject-Instanzen als "Kinder" zu beinhalten. Durch Container wird es möglich, mehrere visuelle Anzeigeobjekte zusammen zu fassen und als Einheit zu sehen, die entsprechend manipuliert werden kann. Ein Container selbst kann weitere Container als "Kinder" beinhalten. Dadurch ist eine hierachisch geschachtelte Zusammenfassung von Anzeigeobjekten möglich.

Wesentliche Methoden der abstrakten Klasse DisplayObjectContainer beziehen sich daher auf die Möglichkeit, DisplayObject-Instanzen als "Kinder" in den Container hineinlegen und wieder herausnehmen zu können sowie die Liste der "Kinder" zu verwalten.

 

Die am häufigsten gebrauchten Methoden und Eigenschaften sind wieder gelb markiert und werden nachfolgend kurz beschrieben.

addChild-Methoden:
Durch addChild wird der DisplayObjectContainer-Instanz eine untergeordnete DisplayObject-Instanz hinzugefügt. Die untergeordneten "Kinder" werden in der Child-Liste abgespeichert. Das erste "Kind" steht an der Stelle 0 (hat den Index 0), das zweite an der Stelle 1 usw. Gleichzeitig bestimmt die Reihenfolge in der Child-Liste die Position und Sichtbarkeit der "Kinder" in der endgültigen Ansicht. "Kinder" mit einem niedrigeren Index liegen unter "Kindern" mit einem höheren Index und können von diesen verdeckt werden.
Durch addChildAt wird das untergeordnete Objekt wird an der angegebenen Indexposition eingefügt.
Wenn man eine DisplayObject-Instanz hinzufügt, die bereits einem anderen Anzeigeobjekt-Container untergeordnet worden ist, wird diese aus dessen Child-Liste entfernt. D.h. eine DisplayObject-Instanz kann nur Element einer Child-Liste sein!

removeChild-Methoden:
Durch removeChild(child) wird die angegebene DisplayObject-Instanz child aus der Child-Liste der DisplayObjectContainer-Instanz entfernt.
removeChildAt(index) entfernt ein untergeordnetes Anzeigeobjekt aus der angegebenen index-Position in der Child-Liste.

Nachdem Instanzen zur Child-Liste hinzugefügt wurden, kann man über setChildIndex die Position einer Instanz verändern, über getChildIndex die Position abfragen, über getChildAt die Instanz an einer bestimmten Position ermitteln und über swapChildren bzw. swapChildrenAt die Position zweier Instanzen vertauschen.

Über die Eigenschaft numChildren kann man die Anzahl der Instanzen in der Child-Liste abrufen.
 

Klassen, die von der Klasse DisplayObjectContainer abgeleitet sind:

 

Unmittelbar von der abstrakten Klasse DisplayObjectContainer abgeleitet sind die konkreten Klassen Sprite, Stage und Loader.

Die Unterklasse Sprite ist das Herzstück der Containerklassen und ein Grundbaustein der Anzeigeliste: ein Knoten der Anzeigeliste, der Grafiken anzeigen und auch untergeordnete Objekte enthalten kann.

Die Unterklasse Stage repräsentiert den Hauptzeichenbereich (Bühne). Die Bühne repräsentiert den gesamten Bereich, in dem Flash-Inhalte angezeigt werden. Das ist die Fläche innerhalb der Rahmen des Flash Player-Fensters. In jeder DisplayObject-Instanz kann man über die Eigenschaft stage auf die Bühne zugreifen. Eine andere Möglichkeit, die Bühne anzusprechen, gibt es nicht und es gibt nur EINE Bühne.

Die Unterklasse Loader wird dazu verwendet, SWF- oder Bilddateien (im JPG-, PNG- oder GIF-Format) zu laden. Man verwendet die load-Methode, um den Ladevorgang einzuleiten. Das geladene Anzeigeobjekt wird dem Loader-Objekt als "Kind" untergeordnet. Ein Loader-Container kann nur ein Kindelement, nämlich das geladen wird, enthalten.


Die Klasse MovieClip wird von Sprite abgeleitet und beschreibt (in der Timeline) animierten Content, der in der Flash-Entwicklungsumgebung erstellt und als MovieClip-Symbol abgespeichert wurde. MovieClips unterscheiden sich von Sprites dadurch, dass MovieClips eine Timeline besitzen und entsprechende Mehtoden und Eigenschaften zum Arbeiten mit der Timeline.

Mit der FLVPlayback-Klasse kann man einen Video-Player in die Flash-Anwendung einschließen, um progressiv heruntergeladene Flash Video-Dateien (FLV) über HTTP oder Streaming-FLV-Dateien vom Flash Media Server (FMS) oder einem anderen Flash Video Streaming Service (FVSS) abzuspielen.

Anzeigeliste (Display List) und Child List

Jedes Anzeigeobjekt, das im Flash Player-Fenster zu sehen sein soll, muss in der Anzeigeliste (Displaylist) aufgelistet sein.
Die Anzeigeliste selbst ist hierachisch geschachtelt aufgebaut. Wenn ein Anzeigeobjekt zur Displaylist hinzugefügt und im sichtbaren Bereich des Flash Player-Fensters platziert wird, rendert der Flash Player den Inhalt des Anzeigeobjekts auf den Bildschirm.

Wir analysieren die Displaylist an Hand der nachfolgenden swf-Datei Landstrasse.swf:



Das nachfolgende Bild zeigt den Zustand des Flash Players bevor eine swf-Datei geöffnet wurde. Wenn der Flash Player "leer" ist, enthält die Displaylist nur ein einziges Element, nämlich eine Instanz der Klasse Stage.
Im linken Bildteil wird das durch die punktierte Linie symbolisiert. Im rechten Bildteil sieht man die Instanz der Bühne als einzigen Knoten der Dispalylist.


 

Wenn der "leere" Flash Player eine swf-Datei öffnet, wird eine Instanz vom Mainmovie (zu dem die Maintimeline gehört) erzeugt und der Displaylist als erstes "Kind" der Bühneninstanz hinzugefügt. Das Mainmovie ist entweder von der Klasse Sprite oder MovieClip bzw. davon eine Subklasse.
Im linken Bildteil wird die Instanz des Mainmovies durch die innere punktierte Linie symbolisiert. Das Mainmovie muss keine visuellen Elemente enthalten. Im rechten Bildteil sieht man die Instanz des Mainmovies als den der Bühneninstanz untergeordneten Knoten in der Dispalylist.


 

In diesem Beispiel wird zuerst eine Shape-Instanz strasse für die Landstraße erzeugt. Darin wird ein graues Rechteck gezeichnet und mit addChild als Kindknoten des Mainmovies der Displaylist dazugefügt. Erst dadurch wird die Straße gerendert und angezeigt. Abschließend wird die Shape-Instanz relativ zum übergeordneten Container (= Instanz des Mainmovies) positioniert.

var strasse:Shape = new Shape();
strasse.graphics.beginFill(0xCCCCCC);
strasse.graphics.drawRect(0,0,400,40);
strasse.graphics.endFill();
this.addChild(strasse);
strasse.y = 220;
 
Im rechten Bildteil sieht man in der Dispalylist die Shape-Instanz der Straße als Kindknoten des Mainmovies.

 
In nächsten Schritt wird ein Container auto erzeugt (= Instanz der Klasse Sprite), in den die Karosserie hingezeichnet wird. Anschließend wird mit addChild die Instanz auto als Kindknoten des Mainmovies der Dispalylist angefügt und relativ zum Mainmovie positioniert.

var auto:Sprite = new Sprite();
auto.graphics.beginFill(0xFF5555);
auto.graphics.drawRect(0,0,200,60);
auto.graphics.drawRect(0,-50,150,50);
auto.graphics.endFill();
this.addChild(auto);
auto.x = 50;
auto.y = 170;

Weil das Auto erst nach der Straße mit addChild zur Displaylist dazugefügt wurde, liegt es vor der Straße und verdeckt diese.  Die Straße und das Auto sind "Geschwisterknoten". Daher liegen im rechten Bildteil die Knoten auf derselben Ebene.


Das Auto braucht Räder.
In der Flash-Entwicklungsumgebung wurde ein MovieClip Rad erstellt. In diesen MovieClip wurde ein Rad mit Speichen gezeichnet und auf der Timeline des Movieclips mit einem Bewegungstween animiert. Bei den Movieclip-Eigenschaften wurde "Export für ActionScript" aktiviert.
Im Skript wird eine Instanz vorderrad des Movieclips Rad erstellt, mit addChild in den Container auto hineingelegt und relativ zum Container platziert.

var vorderrad:MovieClip = new Rad();
auto.addChild(vorderrad);
vorderrad.x = 160;
vorderrad.y = 60;
 
Das Vorderrad liegt als eine Movieclip-Instanz im Sprite-Container auto und überdeckt die Karosserie, die direkt in den Container gezeichnet wurde. Im rechten Bildteil ist die Instanz des Vorderrads ein Kindknoten des Autos.


Analog wird eine Movieclip-Instanz des Movieclips Rad für das Hinterrad erzeugt und mit addChild in den Container auto gelegt.

var hinterrad:MovieClip = new Rad();
auto.addChild(hinterrad);
hinterrad.x = 40;
hinterrad.y = 60
 
In der Displaylist ist der Knoten des Hinterrads ein "Geschwisterknoten" vom Vorderrad und ein "Kindknoten" des Autos.


Die Bäume entlang der Straße:
In der Flash-Entwicklungsumgebung wurde ein MovieClip-Symbol Baum erstellt. In diesen MovieClip wurde ein einfacher Baum gezeichnet. Bei den Movieclip-Eigenschaften wurde wieder "Export für ActionScript" aktiviert.
Im Skript wird eine Instanz baum1 des Movieclips Baum erstellt und anschließend wird mit addChild die Instanz baum1 als Kindknoten des Mainmovies der Dispalylist angefügt und relativ zum Mainmovie positioniert.

var baum1:MovieClip = new Baum();
this.addChild(baum1);
baum1.x = 110;
baum1.y = 280;

Weil der Baum nach dem Auto mit addChild zur Displaylist dazugefügt wurde, liegt es vor dem Auto und der Straße und verdeckt diese.  Der Baum, das Auto und die Straße sind "Geschwisterknoten". Daher liegen im rechten Bildteil die Knoten auf derselben Ebene.


Analog wird der zweite Baum hinzugefügt:
Im Skript wird eine Instanz baum2 des Movieclips Baum erstellt. Aber anschließend wird mit addChild At die Instanz baum2 an der Stelle 0 als Kindknoten des Mainmovies der Dispalylist angefügt und relativ zum Mainmovie positioniert.

var baum2:MovieClip = new Baum();
this.addChildAt(baum2,0);
baum2.scaleX = baum2.scaleY = 0.7;
baum2.x = 310;
baum2.y = 220;

Die Bäume, das Auto und die Straße sind "Geschwisterknoten" und liegen daher im rechten Bildteil auf derselben Ebene.
Die Positionierung der Instanz baum2 an der Stelle 0 bewirkt allerdings, dass die Instanz unter allen Geschwisterknoten platziert und daher der untere Teil des Stamms von der Straße verdeckt wird. Daher liegt jetzt im rechten Teil der Grafikder Knoten der Instanz baum2 ganz am Anfang der "Geschwisterliste".


Child List

Container (Sprites, Moveclips) besitzen eine geordnete Child List, mit allen Anzeigeobjekten, die in dem Container liegen. Die Reihenfolge in der Liste legt fest welche Anzeigeobjekte von anderen Geschwisterobjekten überdeckt werden können. Das zu unterst liegende Objekt hat den Index 0. Das mit addChild zuletzt hinzugefügte Objekt wird ganz oben in der Child List platziert.
Mit entsprechenden Methoden der Klasse DisplayObjectContainer kann diese Reihenfolge verändert werden. Siehe voriges Kapitel.

In der obigen Abbildung sind die Child Lists des Mainmovies und des Autocontainers blau zusammengefasst und aufsteigend von links nach rechts zu lesen.

Die Klasse MovieClips, Bildrate

Movieclips sind ganz spezielle Container. Sie enthalten als Erweiterung zu den Sprite-Containern eine Timeline. Movieclips sind nur im Zusammenhang mit der Flash-Entwicklungsumgebung relevant. Reine ActionScript-Programme, die z.B. in Flex kompiliert werden, benötigen keine Movieclips sondern nur Sprite-Container.

Die Klasse MovieClip:

Die Klasse MovieClip wird von Sprite abgeleitet und beschreibt in der Timeline animierten Content, der in der Flash-Entwicklungsumgebung erstellt und als MovieClip-Symbol abgespeichert wurde. MovieClips unterscheiden sich von Sprites dadurch, dass MovieClips eine Timeline besitzen und entsprechende Methoden und Eigenschaften zum Arbeiten mit der Timeline und zum Steuern des Abspielkopfes der Timeline.


Abb.: Timeline mit Abspielkopf (playback header). Die Bilder (frames) sind durchnummeriert.

 

Die wichtigsten Methoden und Eigenschaften sind gelb markiert:

play und stop starten und stoppen den Abspielkopf.

Mit nextFrame wird der Abspielkopf um ein Bild nach rechts (= vorwärts) verschoben und
mit prevFrame um ein Bild nach links (= rückwärts).

Durch gotoAndPlay bzw. gotoAndStop wird der Abspielkopf zu einem bestimmten Bild verschoben und beginnt dort mit dem Abspielen bzw. stoppt.

currentframe liefert die Nummer des aktuellen Bildes, in dem der Abspielkopf gerade steht und
totalFrames die Anzahl aller Bilder in der MovieClip-Instanz.
 

Bildrate

In den Eigenschaften der Flash-Entwicklungsumgebung wird durch die Bildrate definiert, wieviele Bilder pro Sekunde der Abspielkopf im Mainmovie und in den einzelnen Movieclip-Instanzen durchläuft. Die Bildrate ist eine allgemeine Grundeinstellung für die Anwendung. Auch wenn keine Movieclips verwendet werden, wird die Darstellung der Grafik auf der Bühne entsprechend der Bildrate aktualisiert.

Es gibt nur eine Bildrate, die für alle Movieclip-Instanzen einschließlich dem Mainmovie und für alle in die Anwendung geladenen swf-Dateien gilt. Mit der framerate-Eigenschaft der Stage-Klasse kann die allgemeine Bildrate über ActionScript eingestellt werden.

Auch wenn der Abspielkopf durch stop oder gotoAndStop in einem Movieclip angehalten wird, läuft der Abspielkopf "am Stand" und das aktuelle Bild wird entsprechend der Bildrate aktualisiert.

Das Schlüsselwort this

Bei der Ausführung eines Skripts verweist das Schlüsselwort "this" auf das Objekt, in dem das Skript enthalten ist. 

Wenn man daher in einem Frame der Maintimeline des Mainmovies ein Skript schreibt, das das Schlüsselwort this enthält, so verweist this in diesem Fall auf das Mainmovie, denn dieses enthält das Skript.
Um das zu überprüfen, genügt es in einer neuen, leeren Flash-Datei im ersten Frame nachfolgendes Skript zu schreiben und anschließend mit STRG+Eingabe den Film zu testen:

trace (this);

Im Ausgabefenster wird [object MainTimeline] angezeigt. this bezieht sich daher auf das Mainmovie.


  

Wenn man hingegen in der Flash-Datei Landstrasse.fla im ersten Frame des Movieclip-Symbols Baum das Skript

trace (this);

platziert, so wird beim Testen des Films im Ausgabefenster zwei Mal [object Baum] angezeigt.
 

 

 

Die Eigenschaften parent und root und ein einfaches Beispiel zur Objekthierachie

Die Eigenschaften parent und root:

Die Klasse DisplayObject enthält die Eigenschaften parent und root. Somit kann man in jedem Anzeigeobjekt diese Eigenschaften abfragen.

parent gibt das in der Anzeigelistenhierarchie übergeordnete "Elternobjekt" an, welches das Anzeigeobjekt enthält von dem aus die Eigenschaft parent abgefragt wurde. Das parent-Objekt muss ein DisplayObjectContainer-Objekt sein, denn sonst könnte das aktuelle Objekt nicht darin enthalten sein.
Mit der parent-Eigenschaft kann man einen relativen Pfad zu Anzeigeobjekten angeben, die über dem aktuellen Anzeigeobjekt liegen. 

root liefert bei einem Anzeigeobjekt in einer geladenen swf-Datei das oberste Anzeigeobjekt des Teilbaums der Anzeigeliste, der diese swf-Datei repräsentiert.
Beim Mainmovie (= die Instanz der Hauptklasse der ersten geladenen SWF-Datei) steht die root-Eigenschaft für das Mainmovie selbst.
Die root-Eigenschaft vom Stage-Objekt steht für das Stage-Objekt selbst.

Die root-Eigenschaft ist für jedes Anzeigeobjekt, das nicht in die Anzeigeliste aufgenommen wurde, auf null gesetzt.

Beispiel:

Geben Sie in eine leere Flash-Datei im ersten Bild des Mainmovies nachstehendes Skript ein:

trace (this);
trace (parent);
trace (root);
//
trace (stage);
trace (stage.root);
trace (stage.parent);

Im Ausgabefenster sehen Sie das Ergebnis:

this bezieht sich in diesem Fall auf das Mainmovie [object MainTimeline].
Das dem Mainmovie übergeordnete parent-Objekt ist die Bühne [object Stage].
Das root-Objekt des mainmovies ist das Mainmovie selbst [object MainTimeline].

stage liefert in jedem Anzeigeobjekt das Bühnenobjekt [object Stage].
Das root-Objekt der Bühne ist die Bühne selbst [object Stage].
Da die Bühne kein übergeordnetes Objekt besitzt, liefert die Eigenschaft stage.parent den Wert null.
 

Ein Beispiel zur Objekthierachie: Farbbalken.fla

Abfragen der Objekthierachie:

Das Skript aus dem Video zusammengefasst. Die Ergebnisse der trace-Funktionen sind als Kommentar daneben angefügt.

trace (this); // [object MainTimeline]
trace (this.numChildren); // 1
trace (this.getChildAt(0)); // [object Rot]
var rotesObjekt:Object = this.getChildAt(0);
trace (rotesObjekt.numChildren); // 2
trace (rotesObjekt.getChildAt(0)); // [object Shape]
trace (rotesObjekt.getChildAt(1)); // [object Gelb]
var gelbesObjekt:Object = rotesObjekt.getChildAt(1);
trace (gelbesObjekt.numChildren);
trace (gelbesObjekt.getChildAt(0)); // [object Shape]
trace (gelbesObjekt.getChildAt(1)); [object Blau]
var blauesObjekt:Object = gelbesObjekt.getChildAt(1);
trace (blauesObjekt.numChildren);
trace (blauesObjekt.getChildAt(0)); // [object Shape]

Abfragen der Eigenschaften parent und root:

Eigensachaften von untergeordneten Movieclips ansprechen und ändern: