Se um objeto DisplayObjectContainer for excluído da lista de exibição, ou movido ou transformado de algum modo, cada objeto de exibição de DisplayObjectContainer também será excluído, movido ou transformado.
Um contêiner é um tipo de objeto de exibição propriamente dito e pode ser adicionado a outro contêiner. Por exemplo, a imagem a seguir mostra um contêiner de objeto de exibição,
pictureScreen
, que tem uma forma de contorno e outros quatro contêineres (do tipo PictureFrame):
Exibir gráfico inteiro
-
A.
-
Uma forma que define a borda do contêiner de objeto de exibição pictureScreen
-
B.
-
Quatro contêineres de objeto de exibição que são filhos do objeto pictureScreen
Para que um objeto apareça na lista de exibição, você deve adicioná-lo a um contêiner que esteja na lista. Para fazer isso, use o método
addChild()
ou o método
addChildAt()
do objeto de contêiner. Por exemplo, sem a linha final do código a seguir, o objeto
myTextField
não seria exibido:
var myTextField:TextField = new TextField();
myTextField.text = "hello";
this.root.addChild(myTextField);
Nesse exemplo de código,
this.root
aponta para o contêiner de objeto de exibição MovieClip que tem o código. No seu código real, você pode especificar um contêiner diferente.
Use o método
addChildAt()
para adicionar o filho a uma posição específica na lista de filhos do contêiner de objeto de exibição. Essas posições de índice baseadas em zero da lista de filhos estão relacionadas à disposição em camadas (ordem da frente para trás) dos objetos de exibição. Por exemplo, considere os três objetos de exibição a seguir. Cada objeto foi criado a partir de uma classe personalizada chamada Ball.
A disposição em camadas desses objetos de exibição no contêiner pode ser ajustada com o método
addChildAt()
. Por exemplo, considere o seguinte código:
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);
Depois que este código é executado, os objetos de exibição são posicionados do seguinte modo no
objeto
DisplayObjectContainer do contêiner. Observe a disposição em camadas dos objetos.
Para reposicionar um objeto na parte superior da lista de exibição, basta adicioná-lo novamente à lista. Por exemplo, depois do código anterior, para mover
ball_A
até a parte superior da pilha, use esta linha do código:
container.addChild(ball_A);
Este código remove
ball_A
por completo do seu local na lista de exibição do
contêiner
e o adicionam novamente à parte superior da lista, que equivale a movê-lo até a parte superior da pilha.
Você pode usar o método
getChildAt()
para verificar a ordem de camadas dos objetos de exibição. O método
getChildAt()
retorna objetos filho de um contêiner com base no número de índice fornecido. Por exemplo, o código a seguir revela nomes de objetos de exibição em posições diferentes da lista de filhos do objeto DisplayObjectContainer do
contêiner
:
trace(container.getChildAt(0).name); // ball_A
trace(container.getChildAt(1).name); // ball_C
trace(container.getChildAt(2).name); // ball_B
Se você remover um objeto de exibição da lista de filhos do contêiner pai, os elementos superiores da lista serão movidos para uma posição inferior no índice filho. Por exemplo, continuando com o código anterior, o código a seguir mostra como o objeto de exibição que estava na posição 2 no DisplayObjectContainer do
contêiner
será movido para a posição 1 se um objeto de exibição inferior da lista de filhos for removido:
container.removeChild(ball_C);
trace(container.getChildAt(0).name); // ball_A
trace(container.getChildAt(1).name); // ball_B
Os métodos
removeChild()
e
removeChildAt()
não excluem uma ocorrência de objeto de exibição por completo. Eles simplesmente a removem da lista de filhos do contêiner. A ocorrência ainda pode ser mencionada por outra variável. Use o operador
delete
para remover um objeto por completo.
Como um objeto de exibição tem apenas um contêiner pai, você pode adicionar uma ocorrência de um objeto de exibição a somente um contêiner. Por exemplo, o código a seguir mostra que o objeto de exibição
tf1
pode existir em apenas um contêiner (nesse caso, um Sprite, que estende a classe 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
Se você adicionar um objeto de exibição que está contido em um contêiner a outro contêiner, esse objeto será removido da lista de filhos do primeiro contêiner.
Além dos métodos descritos acima, a classe DisplayObjectContainer define vários métodos para trabalhar com objetos de exibição filho, incluindo os seguintes:
-
contains()
: determina se um objeto de exibição é filho de DisplayObjectContainer.
-
getChildByName()
: recupera um objeto de exibição por nome.
-
getChildIndex()
: retorna a posição de índice de um objeto de exibição.
-
setChildIndex()
: altera a posição de um objeto de exibição filho.
-
removeChildren()
: remove vários objetos de visualização filho.
-
swapChildren()
: alterna a ordem de frente para trás de dois objetos de exibição.
-
swapChildrenAt()
: alterna a ordem de frente para trás de dois objetos de exibição, especificados pelos valores de índice.
Para obter mais informações, consulte os respectivos itens na
Referência do ActionScript® 3.0 para Adobe® Flash® Platform
.
Lembre-se de que um objeto de exibição que está fora da lista (não incluído em um contêiner de objeto de exibição que é filho do objeto Stage) é conhecido como objeto de exibição
fora da lista
.