26 06 08

Cargar SWF o JPG externos con ActionScript 3

Escrito por: WeeDo en Flash, Tutoriales, AS3

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):

Actionscript:
  1. import flash.display.Loader;

una vez importada la clase pasamos a generar la instancia y los Listeners necesarios para manejar nuestra carga externa.

Actionscript:
  1. var loader:Loader = new Loader();
  2. loader.contentLoaderInfo.addEventListener(Event.OPEN, onOpen);
  3. loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgress);
  4. 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:

Actionscript:
  1. 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:

Actionscript:
  1. function onOpen(e:Event):void
  2. {
  3. // Aquí iría tu código cuando se inicia la carga... Podrías mostrar un cargador por ejemplo.
  4. }
  5.  
  6. function onProgress(e:ProgressEvent):void
  7. {
  8. // Aquí podrías obtener el porcentaje de tú cargar y mostrárselo al usuario... una buena forma seria así:
  9. // var porcentaje:Number = e.bytesLoaded/e.bytesTotal * 100;
  10. // y mostrar la variable "porcentaje" en donde quieras.
  11. }
  12.  
  13. function onComplete(e:Event):void
  14. {
  15. // Aquí podrías sacar el cargador y añadir el objeto cargado a la película de la siguiente forma:
  16. // addChild(loader);
  17. }

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:

Actionscript:
  1. import flash.display.Loader;
  2. import flash.events.*;
  3. import flash.net.URLRequest;
  4.  
  5. var loader:Loader = new Loader();
  6. loader.contentLoaderInfo.addEventListener(Event.OPEN, onOpen);
  7. loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgress);
  8. loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
  9.  
  10. loader.load(new URLRequest("peliculaExterna.swf"));
  11.  
  12. function onOpen(e:Event):void
  13. {
  14. // Aquí iría tu código cuando se inicia la carga... Podrías mostrar un cargador por ejemplo.
  15. }
  16.  
  17. function onProgress(e:Event):void
  18. {
  19. // Aquí podrías obtener el porcentaje de tú cargar y mostrárselo al usuario... una buena forma seria así:
  20. // var porcentaje:Number = e.bytesLoaded/e.bytesTotal * 100;
  21. // y mostrar la variable "porcentaje" en donde quieras.
  22. }
  23.  
  24. function onComplete(e:Event):void
  25. {
  26. // Aquí podrías sacar el cargador y añadir el objeto cargado a la película de la siguiente forma:
  27. // addChild(loader);
  28. }

Espero les sirva como siempre digo, y espero comentarios, preguntas y sugerencias!
Saludos!

7 comentarios sobre “Cargar SWF o JPG externos con ActionScript 3”

  • 1

    Lexo dijo:

    hoy me he puesto a revisar todos tus ejemplos me da este error: 1013: El atributo private sólo se puede utilizar en definiciones de propiedad de clase.

    en 3 lineas

  • 2

    WeeDo dijo:

    Pegá por lo menos las primeras lineas de tu código acá, asi veo que puede ser… o mandame el código a mi contacto y lo veo completo.

    Saludos!

  • 3

    Jesús dijo:

    A mí también me pasa lo mismo, me da el error 1013, he puesto el mismo código que esta aquí arriba.
    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!

  • 4

    WeeDo dijo:

    Jesús y Lexo:
    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!

  • 5

    william dijo:

    ey men, aplique tu codigo a una clase, pero me genera errores

    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

  • 6

    william dijo:

    este es el codigo de mi clase, por si alguna cosa

    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);

    }

    }
    }

  • 7

    WeeDo dijo:

    william fijate que tienes mal puesto un }
    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 :D

    Igual siempre son bienvenidas las dudas en el blog!

    Saludos

Deje un comentario