Cargar SWF o JPG externos con ActionScript 3
Siguiendo con los tutoriales básico de ActionScript 3, me pareció interesante mostrarles como cargar un SWF externo en AS3.
Un recurso muy utilizado a la hora de armar una página o una aplicación en Flash.
El proceso a seguir es medianamente similar a lo que era usar MovieClipLoader en ActionScript 2, pero obviamente cambiando la sintaxis.
Lo bueno que tiene AS3 es que todo se maneja de manera similar a través de los Listeners, por lo que hace la programación bastante intuitiva a la hora de empezar si uno no conoce todos los elementos que AS3 nos da para trabajar.
Bien comencemos...
La clase que se utiliza en AS3 para cargar tanto SWF como JPG externos, es la clase Loader que está en el paquete flash.display.
Lo primero que hay q hacer es instanciar esta clase. Obviamente si la usamos en una clase personal hay que importar la clase de la siguiente manera (desde el código de un fla no hace falta):
-
import flash.display.Loader;
una vez importada la clase pasamos a generar la instancia y los Listeners necesarios para manejar nuestra carga externa.
-
var loader:Loader = new Loader();
-
loader.contentLoaderInfo.addEventListener(Event.OPEN, onOpen);
-
loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgress);
-
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
Es importante destacar que los Listenes no se le agregan al loader, sino al contenidos del mismo... para saber cuándo se abrió, cuando se está cargando y cuando se termina de cargar el contenido. Por eso se escribe el contentLoaderInfo.
Esa es una de las diferencias con el URLLoader (además de que el mismo se usa para cargar datos y no JPG o SWF).
También es importante aclarar que se podría agregar otro Listener con el Event.INIT, que lo que hace es "escuchar" cuando la película se comienza a iniciar.
Lo siguiente a hacer es indicarle que queremos cargar a nuestro objeto Loader. Lo hacemos de la siguiente manera:
-
loader.load(new URLRequest("peliculaExterna.swf"));
Usamos URLRequest para indicar que swf o jpg queremos cargar. Para ellos si estamos creando una clase deberiamos importar la clase URLRequest, que esta en el paquete flash.net.URLRequest
Lo último que nos quedaría hacer es definir las funciones que son llamadas por los Listener, cosa que vamos a hacer a continuación. Atención a los comentarios:
-
function onOpen(e:Event):void
-
{
-
// Aquí iría tu código cuando se inicia la carga... Podrías mostrar un cargador por ejemplo.
-
}
-
-
function onProgress(e:ProgressEvent):void
-
{
-
// Aquí podrías obtener el porcentaje de tú cargar y mostrárselo al usuario... una buena forma seria así:
-
// var porcentaje:Number = e.bytesLoaded/e.bytesTotal * 100;
-
// y mostrar la variable "porcentaje" en donde quieras.
-
}
-
-
function onComplete(e:Event):void
-
{
-
// Aquí podrías sacar el cargador y añadir el objeto cargado a la película de la siguiente forma:
-
// addChild(loader);
-
}
Lo mismo que con Loader y URLRequest, si estamos haciendo una clase importar las clases de eventos. En este caso serian flash.events.Event y flash.events.ProgressEvent o simplificar las dos en una linea así: flash.events.*
Con este código entonces podríamos cargar tanto SWF como JPG. Obviamente variarían algunas cosas, como que hacer con el objeto cargado, pero esta es una buena base para que sigan investigando.
El código completo:
-
import flash.display.Loader;
-
import flash.events.*;
-
import flash.net.URLRequest;
-
-
var loader:Loader = new Loader();
-
loader.contentLoaderInfo.addEventListener(Event.OPEN, onOpen);
-
loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgress);
-
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
-
-
loader.load(new URLRequest("peliculaExterna.swf"));
-
-
function onOpen(e:Event):void
-
{
-
// Aquí iría tu código cuando se inicia la carga... Podrías mostrar un cargador por ejemplo.
-
}
-
-
function onProgress(e:Event):void
-
{
-
// Aquí podrías obtener el porcentaje de tú cargar y mostrárselo al usuario... una buena forma seria así:
-
// var porcentaje:Number = e.bytesLoaded/e.bytesTotal * 100;
-
// y mostrar la variable "porcentaje" en donde quieras.
-
}
-
-
function onComplete(e:Event):void
-
{
-
// Aquí podrías sacar el cargador y añadir el objeto cargado a la película de la siguiente forma:
-
// addChild(loader);
-
}
Espero les sirva como siempre digo, y espero comentarios, preguntas y sugerencias!
Saludos!


Escrito por: WeeDo en 



Lexo dijo:
en 3 lineas
WeeDo dijo:
Saludos!
Jesús dijo:
lo que lo he puesto dentro de un fotograma dentro de una película que no esta en la principal yo solo quiero que en ese frama me carge esa pelicula y puntoo
Gracias de antemano!
WeeDo dijo:
El problema es simple… el atributo “private” que hay delante de las funciones va solamente si usan este codigo en una clase… de lo contrario deberian sacar esa palabra de las declaraciones de las functiones…
Cambie el código, para que no se generen confuciones…
Saludos!
william dijo:
1120: Acceso a una propiedad loader no definida
1120: Acceso a una propiedad onOpen no definida
y asi con todos los metodos, por favor espero una ayuda,
gracias
william dijo:
package c_cargando
{
import flash.display.Loader;
import flash.events.*;
import flash.net.URLRequest;
public class cargador
{
public function cargador():void
{
}
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.OPEN, onOpen);
loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgress);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
loader.load(new URLRequest(”lupa.swf”));
private function onOpen(e:Event):void
{
trace(’inicia carga’);
// Aquí iría tu código cuando se inicia la carga… Podrías mostrar un cargador por ejemplo.
}
private function onProgress(e:Event):void
{
// Aquí podrías obtener el porcentaje de tú cargar y mostrárselo al usuario… una buena forma seria así:
var porcentaje:Number = e.bytesLoaded/e.bytesTotal * 100;
trace(’porcentaje’);
// y mostrar la variable “porcentaje” en donde quieras.
}
private function onComplete(e:Event):void
{
trace(’carga completa’);
// Aquí podrías sacar el cargador y añadir el objeto cargado a la película de la siguiente forma:
addChild(loader);
}
}
}
WeeDo dijo:
en el metodo constructor “cargador” fijate q esta vacio…
y abajo de el hay varias lineas que esta sueltas en la clase…
Deberían ir dentro del metodo “cargador”
Fijate bien la sintaxis y si te devuelve un error intenta detectarlo, ya que flash es muy especifico con el problema
Igual siempre son bienvenidas las dudas en el blog!
Saludos