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.