Arbeiten mit Anzeigeobjektcontainern

Flash Player 9 und höher, Adobe AIR 1.0 und höher

Wenn ein DisplayObjectContainer-Objekt aus der Anzeigeliste gelöscht, verschoben oder auf andere Weise transformiert wurde, werden die entsprechenden Anzeigeobjekte im Anzeigeobjektcontainer ebenfalls gelöscht, verschoben oder transformiert.

Ein Anzeigeobjektcontainer ist selbst eine Art Anzeigeobjekt – es kann einem anderen Anzeigeobjektcontainer hinzugefügt werden. Das folgende Bild zeigt beispielsweise einen Anzeigeobjektcontainer, pictureScreen , der eine Konturform und vier weitere Anzeigeobjektcontainer (des Typs „PictureFrame“) enthält:

Grafik in Originalgröße anzeigen
A.
Eine Form definiert den Rahmen des pictureScreen-Anzeigeobjektcontainers.

B.
Vier Anzeigeobjektcontainer, bei denen es sich um untergeordnete Elemente des pictureScreen-Objekts handelt.

Damit ein Anzeigeobjekt in der Anzeigeliste erscheint, muss es einem Anzeigeobjektcontainer hinzugefügt werden, der sich bereits in der Anzeigeliste befindet. Dazu verwenden Sie die addChild() - oder die addChildAt() -Methode des Containerobjekts. Ohne die letzte Zeile des folgenden Codes wird das Objekt myTextField nicht angezeigt:

var myTextField:TextField = new TextField(); 
myTextField.text = "hello"; 
this.root.addChild(myTextField);

In diesem Codebeispiel verweist this.root auf den MovieClip-Anzeigeobjektcontainer, der den Code enthält. In Ihrem Code können Sie einen anderen Container angeben.

Verwenden Sie die addChildAt() -Methode, um das untergeordnete Element an einer bestimmten Position in der Child-Liste des Anzeigeobjektcontainers hinzuzufügen. Diese nullbasierten Indexpositionen in der Child-Liste beziehen sich auf die Ebenen der Anzeigeobjekte (von vorne nach hinten). Betrachten Sie das Beispiel der folgenden drei Anzeigeobjekte. Jedes Objekt wurde aus einer benutzerdefinierten Klasse namens „Ball“ erstellt.

Die Reihenfolge der Ebenen dieser Anzeigeobjekte in ihrem Container kann mithilfe der Methode addChildAt() eingestellt werden. Betrachten Sie den folgenden Beispielcode:

ball_A = new Ball(0xFFCC00, "a"); 
ball_A.name = "ball_A"; 
ball_A.x = 20; 
ball_A.y = 20; 
container.addChild(ball_A); 
 
ball_B = new Ball(0xFFCC00, "b"); 
ball_B.name = "ball_B"; 
ball_B.x = 70; 
ball_B.y = 20; 
container.addChild(ball_B); 
 
ball_C = new Ball(0xFFCC00, "c"); 
ball_C.name = "ball_C"; 
ball_C.x = 40; 
ball_C.y = 60; 
container.addChildAt(ball_C, 1);

Nach dem Ausführen dieses Codes sind die Anzeigeobjekte im DisplayObjectContainer-Objekt container in der folgenden Reihenfolge positioniert. Beachten Sie die Ebenenanordnung der Objekte.

Um ein Objekt auf der obersten Ebene in der Anzeigeliste zu positionieren, fügen Sie es der Liste einfach noch einmal hinzu. Verwenden Sie beispielsweise die folgende Zeile, um ball_A nach dem vorangegangenen Code in die oberste Ebene des Stapels zu verschieben:

container.addChild(ball_A);

Dieser Code löscht ball_A an seiner Position in der Anzeigeliste von container und fügt es an der Spitze der Liste neu hinzu – dies führt letztlich dazu, dass das Objekt in die oberste Ebene des Stapels verschoben wird.

Mit der getChildAt() -Methode können Sie die Ebenenreihenfolge der Anzeigeobjekte überprüfen. Die getChildAt() -Methode gibt die untergeordneten Objekte in einem Container basierend auf der Indexnummer zurück, die Sie übergeben haben. Im folgenden Beispielcode werden die Namen der Anzeigeobjekte an den verschiedenen Positionen in der Child-Liste des DisplayObjectContainer-Objekts container sichtbar gemacht:

trace(container.getChildAt(0).name); // ball_A 
trace(container.getChildAt(1).name); // ball_C 
trace(container.getChildAt(2).name); // ball_B

Wenn Sie ein Anzeigeobjekt aus der Child-Liste des übergeordneten Containers entfernen, werden die höheren Elemente in der Liste um jeweils eine Position in der untergeordneten Indexposition nach unten verschoben. Im folgenden Beispiel setzen wir den Code aus den vorangegangenen Beispiel fort. Es zeigt, wie ein Anzeigeobjekt, das sich an Position 2 im DisplayObjectContainer-Objekt container befand, an die Position 1 verschoben wird, wenn ein niedrigeres Anzeigeobjekt aus der Child-Liste entfernt wird:

container.removeChild(ball_C); 
trace(container.getChildAt(0).name); // ball_A 
trace(container.getChildAt(1).name); // ball_B

Die Methoden removeChild() und removeChildAt() löschen eine Anzeigeobjektinstanz nicht vollständig. Sie entfernen sie einfach nur aus der Child-Liste des Containers. Die Instanz kann dennoch von einer anderen Variablen für Verweise genutzt werden. (Verwenden Sie den Operator delete , um ein Objekt vollständig zu löschen.)

Da ein Anzeigeobjekt nur einen übergeordneten Container hat, können Sie eine Instanz eines Anzeigeobjekts nur einem Anzeigeobjektcontainer hinzufügen. Im folgenden Beispielcode wird gezeigt, dass das Anzeigeobjekt tf1 nur in einem Container existieren kann (in diesem Fall ein Sprite, das die DisplayObjectContainer-Klasse erweitert):

tf1:TextField = new TextField(); 
tf2:TextField = new TextField(); 
tf1.name = "text 1"; 
tf2.name = "text 2"; 
 
container1:Sprite = new Sprite(); 
container2:Sprite = new Sprite(); 
 
container1.addChild(tf1); 
container1.addChild(tf2); 
container2.addChild(tf1); 
 
trace(container1.numChildren); // 1 
trace(container1.getChildAt(0).name); // text 2 
trace(container2.numChildren); // 1 
trace(container2.getChildAt(0).name); // text 1

Wenn Sie ein Anzeigeobjekt, das in einem Anzeigeobjektcontainer enthalten ist, einem anderen Anzeigeobjektcontainer hinzufügen, wird es aus der Child-Liste des ersten Anzeigeobjektcontainers entfernt.

Neben den beiden oben beschriebenen Methoden definiert die DisplayObjectContainer-Klasse weitere Methoden zum Arbeiten mit untergeordneten Anzeigeobjekten. Hierzu gehören u. a. die Folgenden:

  • contains() : Ermittelt, ob ein Anzeigeobjekt ein untergeordnetes Element eines DisplayObjectContainer ist.

  • getChildByName() : Ruft ein Anzeigeobjekt über den Namen ab.

  • getChildIndex() : Gibt die Indexposition eines Anzeigeobjekts zurück.

  • setChildIndex() : Ändert die Position eines untergeordneten Anzeigeobjekts.

  • removeChildren() : Entfernt mehrere untergeordnete Anzeigeobjekte.

  • swapChildren() : Kehrt die Reihenfolge zweier Anzeigeobjekte um (von vorne nach hinten).

  • swapChildrenAt() : Kehrt die Reihenfolge zweier Anzeigeobjekte um (von vorne nach hinten), angegeben durch deren Indexwerte.

Weitere Informationen finden Sie in den jeweiligen Einträgen im ActionScript 3.0-Referenzhandbuch für die Adobe Flash-Plattform .

Zur Erinnerung: Ein Anzeigeobjekt, das sich nicht in der Anzeigeliste befindet (eines, das sich nicht in einem Anzeigeobjektcontainer befindet, der ein untergeordnetes Objekt der Bühne ist), wird als Offlist -Anzeigeobjekt bezeichnet.