Recorrido de la lista de visualización

Tal como se ha visto, la lista de visualización tiene una estructura de árbol. En la parte superior del árbol está el objeto Stage, que puede contener varios objetos de visualización. Estos objetos de visualización, que son al mismo tiempo contenedores de objetos de visualización, pueden contener otros objetos de visualización o contenedores de objetos de visualización.


Un diagrama de una estructura de lista de visualización hipotética de un archivo SWF.

La clase DisplayObjectContainer incluye propiedades y métodos para recorrer la lista de visualización, mediante las listas de elementos secundarios de los contenedores de objetos de visualización. Por ejemplo, el código siguiente añade dos objetos de visualización, title y pict, al objeto container (que es un objeto Sprite y la clase Sprite amplía la clase 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);

El método getChildAt() devuelve el elemento secundario de la lista de visualización en una posición de índice específica:

trace(container.getChildAt(0) is TextField); // true

También se puede acceder a los objetos secundarios por el nombre. Cada objeto de visualización tiene una propiedad de nombre y, si no se asigna, Flash Player asigna un valor predeterminado como, por ejemplo, "instance1". Por ejemplo, el código siguiente muestra cómo utilizar el método getChildByName() para acceder a un objeto de visualización secundario con el nombre "banana loader":

trace(container.getChildByName("banana loader") is Loader); // true

Si se utiliza el método getChildByName() el resultado es más lento que si se usa el método getChildAt().

Como un contenedor de objeto de visualización puede contener otros contenedores de objetos de visualización como objetos secundarios en su lista de visualización, se puede recorrer toda la lista de visualización de la aplicación como un árbol. Por ejemplo, en el fragmento de código anterior, cuando finaliza la operación de carga del objeto Loader pict, el objeto pict tendrá cargado un objeto de visualización secundario, que es el mapa de bits. Para acceder a este objeto de visualización de mapa de bits, se puede escribir pict.getChildAt(0). También se puede escribir container.getChildAt(0).getChildAt(0) (porque container.getChildAt(0) == pict).

La función siguiente proporciona una salida trace() con sangría de la lista de visualización desde un contenedor de objeto de visualización:

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 + " ") } } }

Flash CS3

 

Enviarme un mensaje de correo electrónico cuando se añadan comentarios a esta página | Informe de comentarios

Página actual: http://livedocs.adobe.com/flash/9.0_es/main/00000149.html