Trabajo con contenedores de objetos de visualización

Flash Player 9 y posterior, Adobe AIR 1.0 y posterior

Si se elimina un objeto DisplayObjectContainer de la lista de visualización o si se mueve o transforma de algún otro modo, también se elimina, mueve o transforma cada objeto de visualización de DisplayObjectContainer.

Un contenedor de objeto de visualización es por sí mismo un tipo de objeto de visualización; puede añadirse a otro contenedor de objeto de visualización. Por ejemplo, en la imagen siguiente se muestra un contenedor de objeto de visualización, pictureScreen , que contiene una forma de contorno y otros cuatro contenedores de objetos de visualización (del tipo PictureFrame):

Ver gráfico a tamaño completo
A.
Una forma que define el borde del contenedor de objeto de visualización pictureScreen

B.
Cuatro contenedores de objetos de visualización que son elementos secundarios del objeto pictureScreen

Para que un objeto de visualización aparezca en la lista de visualización, debe añadirse a un contenedor de objeto de visualización incluido en la lista de visualización. Para ello, se utiliza el método addChild() o el método addChildAt() del objeto contenedor. Por ejemplo, sin la línea final del código siguiente, no se mostraría el objeto myTextField :

var myTextField:TextField = new TextField(); 
myTextField.text = "hello"; 
this.root.addChild(myTextField);

En este ejemplo de código, this.root señala al contenedor de objeto de visualización MovieClip que contiene el código. En el código real, se puede especificar un contenedor distinto.

Se debe usar el método addChildAt() para añadir el elemento secundario a una posición específica de la lista secundaria del contenedor de objeto de visualización. Estas posiciones del índice basado en cero de la lista de elementos secundarios se refieren a la organización en capas (orden de delante a atrás) de los objetos de visualización. Por ejemplo, observe los tres objetos de visualización siguientes. Cada objeto se creó a partir de una clase personalizada denominada Ball.

La organización en capas de estos objetos de visualización en el contenedor puede ajustarse con el método addChildAt() . Por ejemplo, considérese el fragmento de código siguiente:

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);

Después de ejecutar este código, los objetos de visualización se colocan del siguiente modo en el objeto DisplayObjectContainer container . Observe la organización en capas de los objetos.

Para volver a colocar un objeto en la parte superior de la lista de visualización, simplemente hay que volver a añadirlo a la lista. Por ejemplo, después del código anterior, para mover ball_A a la parte superior de la pila, debe utilizarse esta línea de código:

container.addChild(ball_A);

Este código quita ball_A de su ubicación en la lista de visualización de container y vuelve a añadirlo a la parte superior de la lista, por lo que finalmente se mueve a la parte superior de la pila.

Puede usarse el método getChildAt() para verificar el orden de las capas de los objetos de visualización. El método getChildAt() devuelve objetos secundarios de un contenedor basándose en el número de índice que se pasa. Por ejemplo, el código siguiente muestra nombres de objetos de visualización en distintas posiciones de la lista de elementos secundarios del objeto DisplayObjectContainer container :

trace(container.getChildAt(0).name); // ball_A 
trace(container.getChildAt(1).name); // ball_C 
trace(container.getChildAt(2).name); // ball_B

Si se quita un objeto de visualización de la lista de elementos secundarios del contenedor principal, los elementos de niveles superiores de la lista descienden una posición en el índice de elementos secundarios. Por ejemplo, siguiendo con el código anterior, el código siguiente muestra cómo el objeto de visualización que estaba en la posición 2 del objeto DisplayObjectContainer container se mueve a la posición 1 si se quita un objeto de visualización situado en un nivel inferior de la lista de elementos secundarios:

container.removeChild(ball_C); 
trace(container.getChildAt(0).name); // ball_A 
trace(container.getChildAt(1).name); // ball_B

Los métodos removeChild() y removeChildAt() no eliminan completamente una instancia de objeto de visualización. Simplemente la quitan de la lista de elementos secundarios del contenedor. Otra variable podrá seguir haciendo referencia a la instancia. (Para eliminar completamente un objeto, debe usarse el operador delete .)

Dado que un objeto de visualización solo tiene un contenedor principal, se puede añadir una instancia de un objeto de visualización a un solo contenedor de objeto de visualización. Por ejemplo, el código siguiente muestra que el objeto de visualización tf1 solo puede existir en un contenedor (en este caso, un objeto Sprite, que amplía la clase 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

Si se añade un objeto de visualización de un contenedor de objeto de visualización a otro contenedor de objeto de visualización, se elimina de la lista de elementos secundarios del primer contenedor de objeto de visualización.

Además de los métodos anteriormente descritos, la clase DisplayObjectContainer define varios métodos para trabajar con objetos de visualización secundarios, entre los que se encuentran:

  • contains() : determina si un objeto de visualización es un elemento secundario de DisplayObjectContainer.

  • getChildByName() : recupera un objeto de visualización por el nombre.

  • getChildIndex() : devuelve la posición de índice de un objeto de visualización.

  • setChildIndex() : cambia la posición de un objeto de visualización secundario.

  • removeChildren() : elimina varios objetos de visualización secundarios.

  • swapChildren() : intercambia el orden de delante a atrás de dos objetos de visualización.

  • swapChildrenAt() : intercambia el orden de delante a atrás de dos objetos de visualización, especificados por sus valores de índice.

Para obtener más información, consulte las entradas correspondiente en Referencia de ActionScript 3.0 para la plataforma de Adobe Flash .

Cabe recordar que un objeto de visualización que esté fuera de la lista de visualización (es decir, que no esté incluido en un contenedor de objeto de visualización secundario del objeto Stage) se denomina objeto de visualización fuera de la lista .