Ventajas de la utilización de la lista de visualización

Flash Player 9 y posterior, Adobe AIR 1.0 y posterior

En ActionScript 3.0, hay clases independientes para los distintos tipos de objetos de visualización. En ActionScript 1.0 y 2.0, muchos de los objetos del mismo tipo se incluyen en una clase: MovieClip.

Esta individualización de clases y la estructura jerárquica de las listas de visualización presentan las siguientes ventajas:

  • Mayor eficacia de representación y disminución del uso de memoria

  • Mejor administración de profundidad

  • Recorrido completo de la lista de visualización

  • Objetos de visualización fuera de la lista

  • Creación más sencilla de subclases de objetos de visualización

Mayor eficacia de representación y tamaños de archivo más pequeños

En ActionScript 1.0 y 2.0, solo era posible dibujar formas en un objeto MovieClip. En ActionScript 3.0, hay clases de objetos de visualización más sencillas en las que se pueden dibujar objetos. Dado que estas clases de objetos de visualización de ActionScript 3.0 no incluyen el conjunto completo de métodos y propiedades que contiene un objeto MovieClip, requieren menos recursos de memoria y de procesador.

Por ejemplo, cada objeto MovieClip incluye propiedades de la línea de tiempo del clip de película, pero un objeto Shape no. Las propiedades para administrar la línea de tiempo pueden consumir muchos recursos de memoria y de procesador. En ActionScript 3.0, el uso del objeto Shape permite mejorar el rendimiento. El objeto Shape tiene una sobrecarga menor que el objeto MovieClip, que es más complejo. Flash Player y AIR no necesitan administrar las propiedades de MovieClip que no se usan, lo cual mejora la velocidad y disminuye la memoria que utiliza el objeto.

Mejor administración de profundidad

En ActionScript 1.0 y 2.0, la profundidad se administraba a través de un esquema lineal de administración de profundidad y de métodos como getNextHighestDepth().

ActionScript 3.0 incluye la clase DisplayObjectContainer, que tiene más métodos y propiedades útiles para administrar la profundidad de los objetos de visualización.

En ActionScript 3.0, al mover un objeto de visualización a una nueva posición en la lista de elementos secundarios de una instancia de DisplayObjectContainer, los demás elementos secundarios del contenedor de objeto de visualización se vuelven a colocar automáticamente y reciben la asignación de las posiciones adecuadas en el índice de elementos secundarios del contenedor de objeto de visualización.

Además, en ActionScript 3.0 siempre es posible descubrir todos los objetos secundarios de cualquier contenedor de objeto de visualización. Cada instancia de DisplayObjectContainer tiene una propiedad numChildren, que muestra el número de elementos secundarios en el contenedor de objeto de visualización. Y como la lista de elementos secundarios de un contenedor de objeto de visualización es siempre una lista con índice, se puede examinar cada objeto de la lista desde la posición 0 hasta la última posición del índice (numChildren - 1). Esto no era posible con los métodos y propiedades de un objeto MovieClip en ActionScript 1.0 y 2.0.

En ActionScript 3.0, se puede recorrer fácilmente la lista de visualización de forma secuencial; no hay huecos en los números de índice de una lista de elementos secundarios de un contenedor de objeto de visualización. Recorrer la lista de visualización y administrar la profundidad de los objetos es mucho más sencillo que lo era en ActionScript 1.0 y 2.0. En ActionScript 1.0 y 2.0, un clip de película podía incluir objetos con huecos intermitentes en el orden de profundidad, lo que podía dificultar el recorrido de la lista de objetos. En ActionScript 3.0, cada lista de elementos secundarios de un contenedor de objeto de visualización se almacena en caché internamente como un conjunto, lo que permite realizar búsquedas rápidamente (por índice). Reproducir indefinidamente todos los elementos secundarios de un contenedor de objeto de visualización es también muy rápido.

En ActionScript 3.0, también se puede acceder a los elementos secundarios de un contenedor de objeto de visualización a través del método getChildByName() de la clase DisplayObjectContainer.

Recorrido completo de la lista de visualización

En ActionScript 1.0 y 2.0, no era posible acceder a algunos objetos que se dibujaban en la herramienta de edición de Flash como, por ejemplo, las formas vectoriales. En ActionScript 3.0, es posible acceder a todos los objetos de la lista de visualización creados con ActionScript o con la herramienta de edición de Flash. Para obtener información, consulte Recorrido de la lista de visualización.

Objetos de visualización fuera de la lista

En ActionScript 3.0, se pueden crear objetos de visualización que no estén incluidos en la lista de visualización visible. Se conocen como objetos de visualización fuera de la lista. Un objeto de visualización solo se añade a la lista de visualización visible cuando se llama al método addChild() o addChildAt() de una instancia de DisplayObjectContainer que ya se haya añadido a la lista de visualización.

Se pueden utilizar los objetos de visualización fuera de la lista para ensamblar objetos de visualización complejos, como los que tienen contenedores de objetos de visualización con varios objetos de visualización. Mantener los objetos de visualización fuera de la lista permite ensamblar objetos complicados sin tener que usar el tiempo de procesamiento para representar estos objetos de visualización. Cuando se necesita un objeto de visualización fuera de la lista, se puede añadir a la lista de visualización. Además, se puede mover un elemento secundario de un contenedor de objeto de visualización dentro y fuera de la lista de visualización, y a cualquier posición que se elija en la lista de visualización.

Creación más sencilla de subclases de objetos de visualización

En ActionScript 1.0 y 2.0, a menudo se añadían objetos MovieClip nuevos a un archivo SWF para crear formas básicas o para mostrar mapas de bits. En ActionScript 3.0, la clase DisplayObject incluye numerosas subclases incorporadas, como Shape y Bitmap. Como las clases de ActionScript 3.0 están más especializadas para determinados tipos de objetos, resulta más sencillo crear subclases básicas de las clases incorporadas.

Por ejemplo, para dibujar un círculo en ActionScript 2.0, se podía crear una clase CustomCircle que ampliara la clase MovieClip al crear una instancia de un objeto de la clase personalizada. Sin embargo, esa clase incluiría además varias propiedades y métodos de la clase MovieClip (por ejemplo, totalFrames) que no se aplican a la clase. Sin embargo, en ActionScript 3.0 es posible crear una clase CustomCircle que amplíe el objeto Shape y que, como tal, no incluya las propiedades y métodos no relacionados contenidos en la clase MovieClip. El código siguiente muestra un ejemplo de una clase CustomCircle:

import flash.display.*; 
 
public class CustomCircle extends Shape 
{ 
    var xPos:Number; 
    var yPos:Number; 
    var radius:Number; 
    var color:uint; 
    public function CustomCircle(xInput:Number,  
                                        yInput:Number,  
                                        rInput:Number,  
                                        colorInput:uint) 
    { 
        xPos = xInput; 
        yPos = yInput; 
        radius = rInput; 
        color = colorInput; 
        this.graphics.beginFill(color); 
        this.graphics.drawCircle(xPos, yPos, radius); 
    } 
}