Ejemplo de clip de película: RuntimeAssetsExplorer

Flash Player 9 y posterior, Adobe AIR 1.0 y posterior

La funcionalidad Exportar para ActionScript puede ser especialmente ventajosa para las bibliotecas que pueden utilizarse en más de un proyecto. Si Flash Player o AIR ejecutan un archivo SWF, los símbolos que se han exportado a ActionScript están disponibles en cualquier archivo SWF del mismo entorno limitado de seguridad que el archivo SWF que lo carga. De este modo, un solo documento de Flash puede generar un archivo SWF cuyo único propósito sea contener activos gráficos. Esta técnica es especialmente útil en proyectos grandes donde los diseñadores que trabajan en activos visuales pueden trabajar en paralelo con los desarrolladores que crean un archivo SWF "envolvente", que carga los archivos SWF de activos gráficos en tiempo de ejecución. Puede utilizarse este método para mantener una serie de archivos de versiones cuyos activos gráficos no dependan del progreso de desarrollo de programación.

La aplicación RuntimeAssetsExplorer carga cualquier archivo SWF que sea una subclase de RuntimeAsset y permite examinar los activos disponibles de dicho archivo SWF. El ejemplo muestra lo siguiente:

  • Carga de un archivo SWF mediante Loader.load()

  • Creación dinámica de un símbolo de la biblioteca exportado para ActionScript

  • Control de la reproducción de MovieClip en el código ActionScript

Antes de comenzar, se debe que tener en cuenta que los archivos SWF que se van a ejecutar en Flash Player se deben ubicar en el mismo entorno limitado de seguridad. Para obtener más información, consulte Entornos limitados de seguridad.

Para obtener los archivos de aplicación para esta muestra, descargue las muestras de Flash Professional. Los archivos de la aplicación RuntimeAssetsExplorer se encuentran en la carpeta Samples/RuntimeAssetsExplorer. La aplicación consta de los siguientes archivos:

Archivo

Descripción

RuntimeAssetsExample.mxml

o

RuntimeAssetsExample.fla

La interfaz de usuario de la aplicación para Flex (MXML) o Flash (FLA).

RuntimeAssetsExample.as

Clase de documento para la aplicación de Flash (FLA).

GeometricAssets.as

Una clase de ejemplo que implementa la interfaz de RuntimeAsset.

GeometricAssets.fla

Un archivo FLA vinculado a la clase GeometricAssets (la clase de documento del archivo FLA), que contiene símbolos exportados para ActionScript.

com/example/programmingas3/runtimeassetexplorer/RuntimeLibrary.as

Una interfaz que define los métodos necesarios que se esperan de todos los archivos SWF de activos de tiempo de ejecución que se cargarán en el contenedor del explorador.

com/example/programmingas3/runtimeassetexplorer/AnimatingBox.as

La clase del símbolo de la biblioteca con la forma de un cuadro giratorio.

com/example/programmingas3/runtimeassetexplorer/AnimatingStar.as

La clase del símbolo de la biblioteca con la forma de una estrella giratoria.

Establecimiento de una interfaz de biblioteca de tiempo de ejecución

Para que el explorador pueda interactuar correctamente con la biblioteca de un archivo SWF, debe formalizarse la estructura de las bibliotecas de activos de tiempo de ejecución. Con este fin se creará una interfaz, que se asemeja a una clase en que es un plano de los métodos que delimitan una estructura esperada, pero a diferencia de una clase no incluye el cuerpo de los métodos. La interfaz proporciona una forma de comunicación entre la biblioteca de tiempo de ejecución y el explorador. Cada archivo SWF de activos de tiempo de ejecución que se cargue en el navegador implementará esta interfaz. Para obtener más información sobre las interfaces y su utilidad, consulte Aprendizaje de ActionScript 3.0.

La interfaz de RuntimeLibrary será muy sencilla; solo se necesita una función que pueda proporcionar al explorador un conjunto de rutas de clases para los símbolos que se exportarán y estarán disponibles en la biblioteca de tiempo de ejecución. Para este fin, la interfaz tiene un solo método(): getAssets().

package com.example.programmingas3.runtimeassetexplorer 
{ 
    public interface RuntimeLibrary 
    { 
        function getAssets():Array; 
    } 
}

Creación del archivo SWF de biblioteca de activos

Mediante la definición de la interfaz de RuntimeLibrary, es posible crear varios archivos SWF de biblioteca de activos que se pueden cargar en otro archivo SWF. La creación de un archivo SWF de biblioteca de activos implica cuatro tareas:

  • Crear una clase para el archivo SWF de biblioteca de activos

  • Crear clases para activos individuales contenidos en la biblioteca

  • Crear los activos gráficos reales

  • Asociar los elementos gráficos a las clases y publicar el archivo SWF de biblioteca

Crear una clase para implementar la interfaz RuntimeLibrary

A continuación, se creará la clase GeometricAssets que implementará la interfaz de RuntimeLibrary. Esta será la clase de documento del archivo FLA. El código para esta clase es muy similar a la interfaz RuntimeLibrary. Se diferencian en que en la definición de clase el método getAssets() no tiene cuerpo de método.

package 
{ 
    import flash.display.Sprite; 
    import com.example.programmingas3.runtimeassetexplorer.RuntimeLibrary; 
     
    public class GeometricAssets extends Sprite implements RuntimeLibrary  
    { 
        public function GeometricAssets() { 
             
        } 
        public function getAssets():Array { 
            return [ "com.example.programmingas3.runtimeassetexplorer.AnimatingBox", 
                     "com.example.programmingas3.runtimeassetexplorer.AnimatingStar" ];     
        } 
    } 
}

Si se tuviera que crear una segunda biblioteca de tiempo de ejecución, se crearía otro archivo FLA basado en otra clase (por ejemplo, AnimationAssets) que proporcionara su propia implementación de getAssets().

Creación de clases para cada activo de MovieClip

En este ejemplo, simplemente se amplía la clase MovieClip sin añadir ninguna funcionalidad a los activos personalizados. El siguiente código de AnimatingStar equivale al de AnimatingBox:

package com.example.programmingas3.runtimeassetexplorer 
{ 
    import flash.display.MovieClip; 
     
    public class AnimatingStar extends MovieClip 
    { 
        public function AnimatingStar() { 
        } 
    } 
}

Publicación de la biblioteca

Ahora se conectarán los activos basados en MovieClip con la nueva clase; para ello, se creará un nuevo archivo FLA y se introducirá GeometricAssets en el campo Clase de documento del inspector de propiedades. Para este ejemplo, se crearán dos formas muy básicas que utilizan una interpolación de la línea de tiempo para girar en el sentido de las agujas del reloj a través de 360 fotogramas. Los símbolos animatingBox y animatingStar están configurados en Exportar para ActionScript y tienen como valor del campo Clase las rutas de clases respectivas especificadas en la implementación de getAssets(). La clase base predeterminada de flash.display.MovieClip se conserva, ya que se va a crear una subclase de los métodos estándar de MovieClip.

Después de establecer la configuración de exportación del símbolo, hay que publicar el archivo FLA para obtener la primera biblioteca de tiempo de ejecución. Este archivo SWF podría cargarse en otro archivo SWF AVM2, y los símbolos AnimatingBox y AnimatingStar estarían disponibles para el nuevo archivo SWF.

Carga de la biblioteca en otro archivo SWF

La última parte funcional que hay que resolver es la interfaz del usuario para el explorador de activos. En este ejemplo, la ruta a la biblioteca de tiempo de ejecución se especifica en el código como una variable denominada ASSETS_PATH. También se puede utilizar la clase FileReference, por ejemplo, para crear una interfaz que busque un determinado archivo SWF en el disco duro.

Cuando la biblioteca de tiempo de ejecución se carga correctamente, Flash Player llama al método runtimeAssetsLoadComplete():

private function runtimeAssetsLoadComplete(event:Event):void 
{ 
    var rl:* = event.target.content; 
    var assetList:Array = rl.getAssets(); 
    populateDropdown(assetList); 
    stage.frameRate = 60; 
}

En este método, la variable rl representa el archivo SWF cargado. El código llama al método getAssets() del archivo SWF cargado, que obtiene la lista de activos disponibles, y los utiliza para llenar un componente ComboBox con una lista de activos disponibles llamando al método populateDropDown(). Este método almacena la ruta de clase completa de cada activo. Si se hace clic en el botón Añadir de la interfaz de usuario se activa el método addAsset():

private function addAsset():void 
{ 
    var className:String = assetNameCbo.selectedItem.data; 
    var AssetClass:Class = getDefinitionByName(className) as Class; 
    var mc:MovieClip = new AssetClass(); 
    ... 
}

que obtiene la ruta de clase del activo que esté seleccionado actualmente en el ComboBox (assetNameCbo.selectedItem.data) y utiliza la función getDefinitionByName() (del paquete flash.utils) para obtener una referencia a la clase del activo para crear una nueva instancia de dicho activo.