Carga de archivos en AS3

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…

Pages: 1 2 3 4 5

Tags: , , ,

6 Responses

  1. […] 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 … Originally posted here: Carga de archivos en AS3 […]

  2. puma sale dice:

    However, at least for myself, I find it quite useful to read these comments that you have offered

  3. carlos dice:

    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

  4. 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!

  5. neutro dice:

    Y como hacer q el archivo q cargue se haga en una ventana nueva? Pq a mí me sale, pero se carga sobre el fichero donde se ubica el botón q da origen a la carga del fichero externo.
    Yo he puesto esto:

    var cargador:Loader = new Loader();
    cargador.x=-52;
    cargador.y=-72;
    addChild(cargador);

    Y después en el evento click del botón añado:
    cargador.load(new URLRequest(“nombrefichero.swf”));

    Lo q me gustaría es q al cargar este fichero tapase el anterior.
    Había probado con el evento MOUSE_OUT que ocultara el fichero original pero no es lo q busco, pq en cuanto se sale el ratón…
    Joder, q charleta, ya lo siento

  6. Hola Neutro,
    Este artículo se hizo pensando en la carga de archivos dentro del mismo documento de Flash que está funcionando. Cargar un Flash en una ventana nueva es otro asunto, porque implica otro HTML (que se verá en la nueva ventana), un poco de JavaScript (porque seguramente querrás decidir el tamaño en el que se abrirá la ventana nueva, la posición, etc.), y otro archivo SWF, que será el que estará visible en el HTML de la ventana nueva.
    Realmente no es el alcance de este artículo.

    Por otra parte, hace ya varios años que he dejado de utilizar la tecnología Flash, para trabajar el 100% con HTML5, CSS3 y JavaScript. ¡Lo recomiendo! Es muy saludable.

    Envío mis saludos! Y lamento no poder ayudarte esta vuelta.