Desde un archivo SWF de Flash, es posible cargar otros archivos SWF externos como activos. Existen varias razones para cargar archivos SWF externos:

  • Puesto que es posible separar un proyecto en varias películas, los archivos SWF individuales tienen un tamaño inferior. Los archivos de menor tamaño se cargan más rápidamente y la gestión de la memoria es más eficaz.  
  • Permite cargar solo el contenido necesario de acuerdo con las acciones del usuario en la película.
  • Es posible reproducir varios archivos SWF de forma consecutiva sin que el navegador tenga que cargar otra página HTML. Las páginas no sufren las pausas ni las actualizaciones relacionadas con volver a cargar.
  • Ofrece una mayor flexibilidad a la hora de organizar los activos del proyecto.
  • Es posible crear una interfaz de usuario compleja que no dependa de un único archivo SWF. Es posible combinar varios archivos SWF para crear la interfaz. La combinación de archivos SWF simplifica la edición, ya que es posible revisar un archivo SWF individual de menor tamaño sin afectar el resto de la interfaz.
  • Varios autores pueden colaborar en el mismo proyecto trabajando en archivos FLA independientes.

La colocación de contenido en un archivo SWF independiente es similar a la colocación de contenido en su propio símbolo de clip de película. La diferencia reside en que el contenido existe fuera del archivo SWF principal. También es posible cargar archivos de imagen, como JPG, PNG o GIF.

Para cargar un archivo SWF externo desde otro archivo SWF, puede usar:

  • La clase Loader de ActionScript 3.0
  • El comando loadMovie de ActionScript 2.0
  • La clase MovieClipLoader de ActionScript 2.0

Utilización de la clase Loader de ActionScript 3.0

La clase Loader de ActionScript 3.0 es una subclase de DisplayObject que se utiliza para cargar y mostrar contenido externo. Para cargar el archivo SWF, se utiliza el método load de la clase. El método load tiene un parámetro obligatorio: una instancia de URLRequest  con la dirección URL del contenido que debe cargarse.

El código de ejemplo siguiente crea una instancia de Loader y carga un archivo SWF externo denominado "myExternalMovie.swf."

var myLoader:Loader = new Loader();                     // create a new instance of the Loader class
var url:URLRequest = new URLRequest("ExternalSWF.swf"); // in this case both SWFs are in the same folder 
myLoader.load(url);                                     // load the SWF file
addChild(myLoader);                                     // add that instance to the display list, adding it to the Stage at 0,0

// (optional)
myLoader.x = 10;                                        // move the loaded SWF 10 pixels to the right (from the left edge)   
myLoader.y = 175;                                       // move the loaded SWF 175 pixels down from the top

// (optional) load a second external SWF file
var my2ndLoader:Loader = new Loader();
var url2:URLRequest = new URLRequest("ExternalSWF2.swf");
my2ndLoader.load(url2);
addChild(my2ndLoader);                                  // optionally, you could put the 2nd SWF beneath 
                                                        // the 1st by using addChildAt(my2ndLoader, 1);
                                                        // displacing the 1st SWF from position 1 to 2 in the display list

// (optional) scaling of the 2nd SWF file
my2ndLoader.scaleX = 2;                                 // scale the SWF horizontally by 200%
my2ndLoader.scaleY = 2;                                 // scale the SWF vertically by 200%

La URL del archivo SWF cargado puede ser relativa o absoluta. Consulte Rutas relativas para obtener más información sobre cómo gestiona Flash Player las URL. Para obtener más información sobre la clase Loader , consulte Loader en la Referencia de lenguaje de ActionScript para la plataforma.

Las referencias a root, cuando están disponibles, siempre representan el objeto de visualización de nivel más alto en la parte de la estructura de árbol de la lista de visualización representada por dicho archivo SWF. (Para las imágenes, root hace referencia al objeto Bitmap).

Nota: en ActionScript 3.0, no hay un equivalente para las propiedades _lockroot ni _level de ActionScript 2.0. Consulte Fundamentos de la programación de la visualización en la Guía del desarrollador de ActionScript 3.0.

Utilización del comando loadMovie de ActionScript 2.0

El comando loadMovie carga una imagen o un archivo SWF externo en un clip de película u otro nivel de la película principal en ActionScript 2.0.

El comando loadMovie tiene dos formas diferentes:

  • Método MovieClip.loadMovie: el método MovieClip se utiliza para cargar contenido externo en una instancia de clip de película específica.
  • Función loadMovie global: la función loadMovie global puede usarse para cargar contenido en películas o niveles. La versión global también tiene dos variaciones, loadMovie y loadMovieNum. La primera variación carga contenido en películas o niveles y la segunda (loadMovieNum) carga específicamente en niveles.

MovieClip.loadMovie

Al cargar contenido externo en instancias de clip de película, Adobe recomienda utilizar la versión del método MovieClip de loadMovie. Esta versión, mediante la cual se pasa la URL del contenido, se llama directamente desde el clip de película en el que se desea cargar el contenido.

myMovieClipInstance.loadMovie("myExternalMovie.swf");  // here only the filename is given, indicating the SWF file 
                                                       // is in the same folder as the parent SWF.

La URL del contenido cargado puede ser relativa o absoluta. Consulte Rutas relativas para obtener más información sobre cómo gestiona Flash Player las URL.

Una vez cargado, el contenido se muestra en el clip de película contenedor. Se conservan la ubicación y otras propiedades básicas del clip de película contenedor. Sin embargo, las funciones o propiedades personalizadas definidas en el clip de película contenedor no se conservan. El nuevo contenido sustituye todo el contenido anterior (incluidos el código y los controladores de eventos como onRelease). Por lo tanto, no se puede utilizar un controlador de eventos onLoad para el clip de película. En este caso, debe utilizar la clase MovieClipLoader (más información a continuación). Para obtener más información sobre MovieClip.loadMovie, consulte MovieClip.loadMovie en la Referencia de lenguaje de ActionScript 2.0.

loadMovie global y loadMovieNum

El comando loadMovie también existe como función global. Esta función tiene dos parámetros obligatorios: la URL del contenido externo y el destino en el que se carga el contenido. El parámetro de destino puede ser una cadena o una referencia. Las líneas siguientes equivalen a cargar "myExternalMovie.swf" en la instancia de clip de película denominada myContainer:

loadMovie("myExternalMovie.swf", myContainer);    // the target myContainer is an object reference
loadMovie("myExternalMovie.swf", "myContainer");  // the target "myContainer" is a string

loadMovie también puede cargar contenido en distintos niveles de Flash Player. Los niveles de Flash Player son como capas de reproductor. Es posible reproducir varias películas en la misma instancia de Flash Player sin necesidad de que estas estén anidadas. Cada nivel representa una única raíz donde las películas pueden reproducirse con independencia de las películas en otros niveles (no es necesario usar _lockroot).

Es posible hacer referencia a niveles de ActionScript mediante el uso de _level seguido de un número, que representa el número de nivel. La película que se carga en primer lugar en Flash Player se encuentra en el nivel _level0. Es posible agregar niveles adicionales sobre este nivel. La siguiente llamada a loadMovie carga "myExternalMovie.swf" en el nivel 1 sobre la película que se está reproduciendo en el reproductor.

loadMovie("myExternalMovie.swf", "_level1");

loadMovieNum es una variación de la función loadMovie global. Este método es igual que loadMovie, aunque solo establece como destino niveles, y lo hace con un número y no un nombre. Para cargar un archivo SWF externo en el nivel 1 (_level1), por ejemplo, utilizaría:

loadMovieNum("myExternalMovie.swf", 1);

Al cargar en niveles, Adobe recomienda utilizar loadMovieNum en lugar de loadMovie. Para obtener más información, consulte loadMovie global en la Referencia de lenguaje de ActionScript 2.0.

Uso de _lockroot para evitar conflictos de _root

Al cargar una película externa en otra película, la referencia _root del clip de película cargado cambia de su línea de tiempo principal a la línea de tiempo de la película que lo ha cargado. Es decir, _root siempre hace referencia a la línea de tiempo situada más arriba en la jerarquía. Si no desea que _root haga referencia a la línea de tiempo situada más arriba, establezca la propiedad _lockroot de la línea de tiempo principal del clip de película cargado en true. Esta propiedad indica a todos los elementos secundarios de dicha línea de tiempo que cuando hagan referencia a _root utilicen esta línea de tiempo.

this._lockroot = true;     // add this code in the main timeline of the SWF file that will be loaded into another SWF

Nota: la propiedad _lockroot solo está disponible al publicar en Flash Player 7 o versiones posteriores.

 Utilización de la clase MovieClipLoader de ActionScript 2.0

La clase MovieClipLoader de ActionScript 2.0 está diseñada para facilitar el proceso de carga de contenido externo en instancias de clip de película. Como se ha mencionado anteriormente, las variables y funciones definidas en clips de película se eliminan cuando se carga nuevo contenido en dichos clips de película. No es posible usar repeticiones de llamada como onLoad. Sin embargo, MovieClipLoader permite sortear esta restricción actuando como sustituto de dichos eventos. El desarrollador crea instancias de MovieClipLoader independientes para gestionar la carga de contenido en otro clip de película. Por lo tanto, no se borran las variables ni las funciones de dicho clip de película.

Para cargar contenido en un clip de película a través de la clase MovieClipLoader, cree primero una nueva instancia de la clase. A continuación, use loadClip para cargar contenido en un clip de película de destino. En el ejemplo siguiente, el nuevo contenido se carga en el clip de película myContainer.

var myLoader:MovieClipLoader = new MovieClipLoader();
myLoader.loadClip("myExternalMovie.swf", myContainer);

Si desea saber si se ha cargado el contenido, utilice un controlador de eventos onLoadInit con la instancia de MovieClipLoader.

var myLoader:MovieClipLoader = new MovieClipLoader(); 
myLoader.addListener(this); 
myLoader.loadClip("myExternalMovie.swf", myContainer); 

function onLoadInit(mc:MovieClip) 
    { 
        trace("content has been loaded into "+mc); 
    }

Si desea controlar en mayor medida la información sobre la carga de contenido en un clip de película, utilice la clase MovieClipLoader en lugar de MovieClip.loadMovie. (Por ejemplo, utilice este controlador de eventos si desea poder comprobar el progreso de la carga). Para obtener más información sobre la clase MovieClipLoader, consulte MovieClipLoader en la Referencia de lenguaje de ActionScript 2.0.

Nota: la clase MovieClipLoader solo está disponible al publicar en Flash Player 7 o versiones posteriores.

 Utilización de rutas relativas para cargar contenido

El uso de rutas relativas con Loader y loadMovie puede resultar confuso. Puesto que la línea de tiempo de cualquier clip de película o archivo SWF puede realizar una acción loadMovie, la pregunta es ¿con qué línea de tiempo está relacionada la película cargada? ¿Está relacionada con la línea de tiempo principal en _level0? ¿O está relacionada con la línea de tiempo que realiza la acción de carga de la película? La respuesta es sencilla: las películas cargadas siempre están relacionadas con la línea de tiempo que las carga. Consulte No se hace referencia a las URL relativas de manera correcta | Flash (tn_04157) para obtener información sobre las rutas relativas aplicable a la carga de archivos SWF externos.

Consideraciones de velocidad de fotogramas

En la mayoría de los casos, las películas cargadas heredan la velocidad de fotogramas de la película principal. Por ejemplo, un archivo SWF cuya velocidad de fotogramas es 12 fps se reproduce a 24 fps cuando se carga en una película cuya velocidad de fotogramas es 24 fps. La única excepción se da cuando la película cargada contiene un sonido en la línea de tiempo cuya sincronización está establecida en "flujo". En estos casos, la película principal hereda la velocidad de fotogramas de la película cargada para garantizar que el sonido se reproduce correctamente.

Nota: ActionScript 3.0 permite cambiar la velocidad de fotogramas de manera dinámica mediante la propiedad Stage.frameRate.

Palabras clave: Flash Player, cargar película; ActionScript; creación de scripts; niveles; tell target; variables; destino; instancia; SWF; loadMovie; tn_14190

Esta obra está autorizada con arreglo a la licencia de Reconocimiento-NoComercial-CompartirIgual 3.0 Unported de Creative Commons.  Los términos de Creative Commons no cubren las publicaciones en Twitter™ y Facebook.

Avisos legales   |   Política de privacidad en línea