Praca z kontenerami obiektów wyświetlanych

Flash Player 9 i nowsze wersje, Adobe AIR 1.0 i nowsze wersje

Jeśli obiekt DisplayObjectContainer zostanie usunięty z listy wyświetlania lub gdy zostanie przeniesiony albo przekształcony w inny sposób, każdy obiekt kontenera DisplayObjectContainer również zostaje usunięty, przeniesiony lub przekształcony.

Kontener obiektów wyświetlanych jest typem obiektu wyświetlanego — może zostać dodany do innego kontenera obiektów wyświetlanych. Na przykład: poniższy obraz przedstawia kontener obiektów wyświetlanych pictureScreen , który zawiera jeden kształt konturu oraz cztery inne kontenery obiektów wyświetlanych (typu PictureFrame):

Powiększ obraz
A.
Kształt definiujący krawędź kontenera obiektów wyświetlanych pictureScreen

B.
Cztery kontenery obiektów wyświetlanych, które są elementami podrzędnymi obiektu pictureScreen

Aby obiekt wyświetlany pojawił się na liści wyświetlani, należy dodać obiekt do kontenera obiektów wyświetlanych, który znajduje się na liście. W tym celu należy użyć metody addChild() lub metody addChildAt() obiektu kontenera. Przykład: bez linii końcowej poniższego kodu obiekt myTextField nie zostałby wyświetlony:

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

W tym przykładowym kodzie this.root wskazuje kontener obiektów wyświetlanych MovieClip, który zawiera kod. W rzeczywistym kodzie możliwe jest określenie innego kontenera.

W celu dodania elementu podrzędnego do określonej pozycji na liście podrzędnej kontenera obiektów wyświetlanych należy użyć metody addChildAt() . Te pozycje indeksu na liście podrzędnej dotyczą warstw (w kolejności od przodu do tyłu) obiektów wyświetlanych. Przykład: rozważmy następujące trzy obiekty wyświetlane. Każdy obiekt został utworzony z niestandardowej klasy o nazwie Ball.

Warstwy tych obiektów wyświetlanych w ich kontenerze można dostosować za pomocą metody addChildAt() . Weźmy na przykład pod uwagę następujący kod:

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);

Po wykonaniu tego kodu obiekty wyświetlane zostaną rozmieszczone w następujący sposób w obiekcie container DisplayObjectContainer. Widoczne są warstwy obiektów.

W celu ponownego umieszczenia obiektu na górze listy wyświetlanej należy ponownie dodać go do listy. Na przykład: w celu przeniesienia obiektu ball_A na górę stosu po wykonaniu poprzedniego kodu należy użyć następującej linii kodu:

container.addChild(ball_A);

Ten kod skutecznie usuwa obiekt ball_A z jego miejsca w liście wyświetlania container , a następnie dodaje go ponownie na górę listy, co w rezultacie powoduje przeniesienie do góry stosu.

W celu sprawdzenia kolejności warstw obiektów wyświetlanych należy użyć metody getChildAt() . Metoda getChildAt() zwraca obiekty podrzędne kontenera w zależności od wprowadzonego numeru indeksu. Na przykład: poniższy kod zawiera nazwy obiektów wyświetlanych w różnych pozycjach na liście podrzędnej obiektu container DisplayObjectContainer:

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

Jeśli obiekt wyświetlany zostanie usunięty z listy podrzędnej kontenera nadrzędnego, elementy położone wyżej na liście zostaną przesunięte w dół o jedną pozycję do indeksu podrzędnego. Przykład: poniższy kod, stanowiący kontynuację poprzedniego, przedstawia przesunięcie obiektu wyświetlanego, który znajdował się w pozycji 2 w obiekcie container DisplayObjectContainer się do pozycji 1 po usunięciu obiektu wyświetlanego, który znajdować się niżej na liście wyświetlania:

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

Metody removeChild() i removeChildAt() nie powodują usunięcia całej instancji obiektu wyświetlanego. Usuwają instancję tylko z listy podrzędnej kontenera. Do instancji nadal mogą się odwoływać inne zmienne. (W celu całkowitego usunięcia obiektu należy użyć operatora delete ).

Obiekt wyświetlany ma tylko jeden kontener nadrzędny, dlatego instancja obiektu może zostać dodana tylko do jednego kontenera obiektów wyświetlanych. Przykład: poniższy kod ilustruje, że obiekt wyświetlany tf1 może istnieć tylko w jednym kontenerze (w takim przypadku: Sprite, który stanowi rozszerzenie klasy DisplayObjectContainer):

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

Jeśli jeden obiekt wyświetlany z jednego kontenera obiektów wyświetlanych zostanie dodany do innego takiego kontenera, ten obiekt zostanie usunięty z listy podrzędnej pierwszego kontenera.

Oprócz metod opisanych powyżej klasa DisplayObjectContainer definiuje kilka metod przeznaczonych do pracy z podrzędnymi elementami wyświetlanymi, między innymi następujące:

  • contains() : określa, czy obiekt wyświetlany jest elementem podrzędnym DisplayObjectContainer.

  • getChildByName() : pobiera obiekt wyświetlany wg nazwy.

  • getChildIndex() : zwraca indeks obiektu wyświetlanego.

  • setChildIndex() : zmienia pozycję podrzędnego elementu wyświetlanego.

  • removeChildren() : usuwa wiele potomnych obiektów ekranowych.

  • swapChildren() : zamienia kolejność z przodu/z tyłu dwóch obiektów wyświetlanych.

  • swapChildrenAt() : zamienia kolejność z przodu/z tyłu dwóch obiektów wyświetlanych, która jest określona przez ich indeksy.

Więcej informacji zawierają odpowiednie sekcje Skorowidza języka ActionScript 3.0 dla platformy Adobe Flash .

Należy przypomnieć, że obiekt wyświetlany, który nie znajduje się na liście wyświetlania — taki, który nie znajduje się w kontenerze obiektów wyświetlanych podrzędnym dla obiektu Stage — jest również określany jako obiekt wyświetlany spoza listy .