Trabalho com contêineres de objeto de exibiçãoFlash 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): Visualizar gráfico inteiro ![]()
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:
Para obter mais informações, consulte os respectivos itens na Referência do ActionScript 3.0 para a plataforma Adobe Flash. 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. |
![]() |