Antes y después
El lengueja de programación de la Plataforma Flash ha pasado por 3 versiones: ActionScript 1, ActionScript, 2 y ActionScript 3. Como sabemos, varias cuestiones han cambiado en el paso de AS2 a AS3. La carga de archivos externos es una de ellas. Si bien la traducción literal es más o menos sencilla, vale la pena repasarla.
Lo que en AS2 solíamos hacer así:
loadMovie("archivo_secundario.swf", this);
En AS3 se debe hacer así (el ejemplo citado a continuación está copiado de la documentación de Adobe, y luego ligeramente modificado):
import flash.display.*;
import flash.net.URLRequest;
var cargador:Loader = new Loader();
var urlReq:URLRequest = new URLRequest("archivo_secundario.swf");
cargador.load(urlReq);
this.addChild(cargador);
Más allá de lo que se puede ver a golpe de vista, hay un par de cuestiones interesantes que trataré de sacar a la luz en este post.
El ejemplo de Adobe:
Antes de crear nuestro propio ejemplo —seguramente más complejo— repasaremos lo que hicieron los muchachos de Adobe. El ejemplo original se incluye en la documentación de la clase Loader (encargada de la carga de archivos externos en AS3).
Se importan las clases necesarias para la realización de la carga de un archivo externo. Nosotros lo haremos de forma detallada cuando nos toque crear nuestro propio ejemplo. Adobe ha sido un poco vago al importar todas las clases del paquete flash.display sin mayores precisiones (como podrán ver ustedes mismos, ésta no es una práctica muy amigable ya que el paquete flash.display contiene numerosas clases que no están siendo utilizadas por el resto del código).
// importar las clases necesarias: import flash.display.*; import flash.net.URLRequest;
Se crea una instancia de la clase Loader, que hará las veces de cargador. Este tipo de objeto (que hereda de la clase DisplayObjectContainer) tiene la funcionalidad necesaria para realizar la carga.
// crear el cargador: var cargador:Loader = new Loader();
Se prepara una instancia de URLRequest, el tipo de objeto que espera recibir el método load de la clase Loader.
// preparar la URL request:
var urlReq:URLRequest = new URLRequest("archivo_secundario.swf");
Efectivamente se da la orden de carga por medio de la función load, incluyendo como parámetro a aquel objeto de tipo URLRequest que creamos anteriormente.
// se da la orden de carga: cargador.load(urlReq);
Hasta aquí, la carga del archivo externo ya se puso en marcha, pero aún queda agregarlo a la escena. La siguiente línea de código agrega al cargador (de tipo Loader) a la escena, como child del root. Siendo que los objetos de clase Loader heredan de DisplayObjectContainer, tienen la posibilidad de agregarse a la Display List, al igual que un MovieClip o un Sprite.
// poner el cargador en escena: this.addChild(cargador);
Recordemos el código completo, comentado:
// importar las clases necesarias:
import flash.display.*;
import flash.net.URLRequest;
// crear el cargador:
var cargador:Loader = new Loader();
// preparar la URL request:
var urlReq:URLRequest = new URLRequest("archivo_secundario.swf");
// dar la orden de carga:
cargador.load(urlReq);
// poner el cargador en escena:
this.addChild(cargador);
A primera vista, parece mucho más complejo que la escueta versión en AS2 (y lo es), pero en programación menos no siempre es más. El cambio a AS3 nos facilita la resolución de errores y la generación de diferentes funcionalidades. El código nuevo ganó en complejidad, pero también en coherencia, orientación a objetos, facilidad en la solución de errores y funcionalidad.
Veremos un poco más a fondo el asunto en la siguiente página…
However, at least for myself, I find it quite useful to read these comments that you have offered
Excelente ver como todo funciona.. sin embargo no pude integrarlo, pues me estaba pidiendo una clase main, mejor dicho..
proyecto
|—fla,swf <—(me pide una clase main.as que importe las otras 2)
|—–[cargaArchivos]
|———AS
podrías colocarlos archivos funcionales por favor.!! gracias :D
Hola Carlos. Mis disculpas por la demora. Recién ahora veo tu comentario. Publiqué esto hace mucho y ya no tengo los archivos originales. Si todavía necesitás ayuda enviame un mail y veo si puedo entender un poco mejor el problema. Saludos!