Flash CS3-Dokumentation |
|||
| Programmieren mit ActionScript 3.0 > Programmieren von Anzeigeobjekten > Verwenden von Anzeigeobjekten > Verwenden von Anzeigeobjektcontainern | |||
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:
Damit ein Anzeigeobjekt in der Anzeigeliste erscheint, muss es einem Anzeigeobjektcontainer hinzugefügt werden, die 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 diese Anzeigeobjekte in ihrem Container kann mithilfe der Methode addChildAt() eingestellt werden. Betrachten Sie den folgenden Code:
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 am Anfang der Liste wieder hinzu. Dies führt 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 Position in der Child-Liste des DisplayObjectContainer-Objekt 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 im Child-Index 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_Atrace(container.getChildAt(1).name); // ball_B
Die Methoden removeChild() und removeChildAt() löschen eine Anzeigeobjektinstanz nicht vollständig. Sie entfernen es 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 Anzeigeobjekt 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.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 entsprechenden Einträgen im Komponenten-Referenzhandbuch für ActionScript 3.0.
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.
Flash CS3
Eine E-Mail an mich senden, wenn dieser Seite Kommentare hinzugefügt werden | Kommentarbericht
Aktuelle Seite: http://livedocs.adobe.com/flash/9.0_de/main/00000148.html