Durante meus estudos de ActionScript 3.0, venho analisando a importância da Display List, examinando o Livro “Learning ActionScript 3.0″ de Rich Shupe c om
Zevan Rosser, cheguei na parte “Displaying the Display List”, ou seja, Exibindo a Lista de Exibição, o autor passou um método ao qual faz uma varredura em todo seu projeto, lhe informando todos os objetos ali criados e seus respectivos filhos aninhados, vou tentar traduzir o contexto de forma clara ao meu entender.
Às vezes é útil, quando você cria muitos objetos aninhados, e precisa percorrer a lista de exibição (display list) para analisar o conteúdo, o método abaixo citado, irá mostrar o funcionamento do mesmo, inserindo no primeiro frame do seu projeto AS3, o seguinte código:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
| function showChildren(dispObj:DisplayObjectContainer, indentLevel:Number):void
{
for (var i:uint = 0; i < dispObj.numChildren; i++) {
var obj:DisplayObject = dispObj.getChildAt(i);
if (obj is DisplayObjectContainer) {
trace(padIndent(indentLevel), obj.name, obj);
showChildren(DisplayObjectContainer(obj), indentLevel + 1);
} else {
trace(padIndent(indentLevel) + obj);
}
}
}
showChildren(stage, 0);
function padIndent(indents:int):String
{
var indent:String = "";
for (var i:Number = 0; i < indents; i++)
{
indent += " ";
}
return indent;
} |
As linhas 1 até 12, define a abertura e fechamento da função showChildren(), que exige como argumento o objeto de exibição que você deseja analisar, e também o level de início da hierarquia. Já na linha 14, o método é chamado passando então o “stage” como objeto a ser analisado, e como level foi passado o valor zero.
Na linha 3 até 11, foi definido um loop, que irá percorrer por todos os objetos até que não haja mais filhos(children), o número de voltas é determinado pelo numChildren, retornando um inteiro(int) representando Bank location Meadows Bank o número de objetos aninhados que esta sendo analisado pelo objeto passado como argumento na chamada da função. A linha 4 preenche a variável “obj” com o próximo children usando o método getChildAt() passando o valor “i” no loop, e assim sucessivamente com todos os objetos aninhados.
Na linha 5, temos uma verificação se o objeto analisado é ou não um container do display object (DisplayObjectContainer), ou seja, se ele tem filhos ou não, caso seja um container (um movieclip por exemplo), no output irá aparecer em nível de hierarquia com seu tipo de objeto e seus filhos, temos então o método padIndent() ao qual passamos como argumento o valor “indentLevel” recebido na função showChildren(). A função padIndent() recebe como argumento o valor do nível de hierarquia, e é controlado através de um loop, que cria os espaçamentos antes de cada linha mostrada no output, deixando corretamente fácil e visível para melhor entendimento do que temos, abaixo na linha 7 temos a chamada para a função showChildren(), passando como argumento um casting do próprio objeto recebido, e como 2º argumento o indentLevel somado com + 1. Finalizando a verificação, caso seja contrária, irá disparar no output somente a chamada da função padIndent() e passando como argumento o indentLevel mais o objeto.
Espero que tenham gostado, abraços!!