Como percorrer a lista de exibiçãoFlash Player 9 e posterior, Adobe AIR 1.0 e posterior Como você observou, a lista de exibição é uma estrutura de árvore. Na parte superior da árvore está o palco, que pode conter vários objetos de exibição. Esses objetos que são contêineres propriamente ditos podem ter outros objetos de exibição ou contêineres. ![]() A classe DisplayObjectContainer inclui propriedades e métodos para percorrer a lista de exibição por meio das listas de filhos dos contêineres de objeto de exibição. Por exemplo, considere o código a seguir, que adiciona dois objetos de exibição, title e pict, ao objeto container (que é um Sprite; a classe Sprite estende a classe DisplayObjectContainer): var container:Sprite = new Sprite(); var title:TextField = new TextField(); title.text = "Hello"; var pict:Loader = new Loader(); var url:URLRequest = new URLRequest("banana.jpg"); pict.load(url); pict.name = "banana loader"; container.addChild(title); container.addChild(pict); O método getChildAt() retorna o filho da lista de exibição em uma posição de índice específica: trace(container.getChildAt(0) is TextField); // true Você também pode acessar objetos filho por nome. Cada objeto de exibição tem uma propriedade de nome e, se você não designá-la, o Flash Player ou AIR atribuirá um valor padrão, como "instance1". Por exemplo, o código a seguir mostra como usar o método getChildByName() para acessar um objeto de exibição filho com o nome "banana loader": trace(container.getChildByName("banana loader") is Loader); // true O método getChildByName() piora mais o desempenho do que o método getChildAt(). Como um contêiner de objeto de exibição pode ter outros contêineres como objetos filho em sua lista de exibição, é possível percorrer a lista inteira do aplicativo como uma árvore. Por exemplo, no trecho de código mostrado anteriormente, assim que a operação de carregamento do objeto pict Loader for concluída, o objeto pict terá um objeto de exibição filho, que é o bitmap carregado. Para acessar esse objeto de exibição de bitmap, você pode gravar pict.getChildAt(0). Você também pode gravar container.getChildAt(0).getChildAt(0) (visto que container.getChildAt(0) == pict). A função a seguir fornece uma saída trace() pretendida da lista de exibição a partir de um contêiner: function traceDisplayList(container:DisplayObjectContainer, indentString:String = ""):void { var child:DisplayObject; for (var i:uint=0; i < container.numChildren; i++) { child = container.getChildAt(i); trace(indentString, child, child.name); if (container.getChildAt(i) is DisplayObjectContainer) { traceDisplayList(DisplayObjectContainer(child), indentString + " ") } } } Adobe FlexO Flex, caso você o utilize, define muitas classes de objeto de exibição e essas classes substituem os métodos de acesso à lista de exibição da classe DisplayObjectContainer. Por exemplo, a classe Container do pacote mx.core substitui o método addChild() e outros métodos da classe DisplayObjectContainer (estendida pela classe Container). No caso do método addChild(), a classe substitui o método de tal forma que não é possível adicionar todos os tipos de objeto de exibição a uma ocorrência de Container no Flex. O método substituído, nesse caso, exige que o objeto filho que está sendo adicionado seja do tipo mx.core.UIComponent. |
![]() |