Esta es una clase que tengo escrita para reutilizar y ahorrarme el tiempo de escribir el mismo código una y otra vez, se trata de una clase para cargar contenido externo.
La clase lo único que hace es cargar el contenido con un Loader y guardar una referencia. También dispara un evento cuando la carga se ha realizado para poder detectarlo desde fuera de la clase.
Esta es la clase:
Código :
package com.zguillez.display { import flash.display.Sprite; import flash.display.Loader; import flash.net.URLRequest; import flash.events.Event; import flash.events.EventDispatcher; //----------------------------------------- public class Contenedor extends Sprite { public static var CARGADO:String = "cargado"; private var _clip:Sprite = new Sprite(); private var _cargado:Boolean = false; private var _content:Sprite; private var _urlAsset:String; //----------------------------------------- public function Contenedor(asset:String=null) { _urlAsset = asset; if (_urlAsset != null) { iniLoad(); } } //----------------------------------------- private function iniLoad(asset:String=null):void { var loader:Loader = new Loader(); var request:URLRequest = new URLRequest(_urlAsset); loader.load(request); var dispatcher:EventDispatcher = loader.contentLoaderInfo; dispatcher.addEventListener(Event.INIT, registraContenido); addChild(loader); } //----------------------------------------- public function set asset(a:String):void { if (_urlAsset != null) { removeChild(_clip); } _urlAsset = a; iniLoad(); } //----------------------------------------- public function get clip():Sprite { return _clip; } public function get cargado():Boolean { return _cargado; } //----------------------------------------- public function registraContenido(e:Event):void { _cargado = true; _clip = e.target.content; dispatchEvent(new Event(Contenedor.CARGADO)); } //----------------------------------------- } }
Su uso es muy simple:
Código :
import com.zguillez.display.Contenedor;
var cont:Contenedor = new Contenedor(); cont.asset = "pelicula.swf"
Y para detectar la carga completa:
Código :
cont.addEventListener(Contenedor.CARGADO, listo); function listo(e:Event):void { trace("carga lista") }
Hay que decir que tambien tiene la posibilidad de cambiar el contenido simplemente asignandole otra ruta:
Código :
cont.asset = "pelicula2.swf"
Es una clase muy simple pero que me resulta útil y es fácilmente extendible para crear otras clases más complejas con preloads o lo que sea... Espero que tambien les resulte útil
1- ¿los últimos 3 códigos van en el primer fotograma no, se crearia una pelicula por cada movieclip que queremos cargar?
2- ¿se puede modificar el diseño del preload?
3 - "es fácilmente extendible para crear otras clases más complejas con preloads o lo que sea..." ¿como más complejas, dinámicas, como youtube, pluggo, algo así? Por:ojala_te_de_1_tiempillo_b
Thx Nice.. Por:kitano_blog
cada vez me gusta más esto, gracias Zguilles. Por:Señor Oz_blog
JaleRu, lo hizo con la funcion dispatchEvent(new Event(Contenedor.CARGADO)); Asi cuando la funcion registraContenido() termina, distribulle un nuevo evento asi para cuando alguien defina un nuevo evento cont.addEventListener(Contenedor.CARGADO, listo); este sera ejecutado cuando el evento se distribulla que es cuando la funcion registraContenido() acaba.
Bye. Por:quien yo?_blog
Gracias, ya entendí... Luego de muchos prueba y error. Debía crear una variable estática y publica. Etc.. weno me da un poco de lata explicar. Pero lo logre. Por:JaLeRu