Trabalho com contêineres de objeto de exibição

Flash Player 9 e posterior, Adobe AIR 1.0 e posterior

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 .