Hace poco tuve la necesidad de tener un fondo que cambiara constantemente, cargando imágenes de una carpeta y haciendo que aparezcan lentamente sobre la anterior en loop constante. Como recién empiezo con esto del AS, preferí hacerlo a mi manera y por mi cuenta, de paso que aprendía el uso de clases. De hecho, ésta es la primera custom class que escribo en mi vida, así que probablemente pueda mejorarse mucho más.
Esta clase toma las imágenes a cargar de un array, donde escribiremos los nombres de los archivos.
Aquí el código:
Código :
package
{
import flash.display.MovieClip;
import flash.display.DisplayObject;
import flash.display.Sprite;
import flash.display.Loader;
import flash.display.LoaderInfo;
import flash.events.Event;
import flash.events.TimerEvent;
import flash.net.*;
import fl.transitions.Tween;
import fl.transitions.TweenEvent;
import fl.transitions.easing.*;
import flash.utils.Timer;
public class DynamicGallery extends MovieClip
{
//creamos las variables a usar
private var imagesArray:Array;
private var index:uint=0;
private var container:MovieClip;
private var loader:Loader;
private var ruta:String="Files/img/"; //para q no escriban la ruta entera
public function DynamicGallery(_imgArr:Array):void
{
imagesArray=_imgArr;
//el container va a recibir las imagenes que se carguen
container=new MovieClip();
addChildAt(container,0);
//lo colocan donde deseen
container.x=0;
container.y=70;
//se crea el loader y un listener que llamara la funcion placeImg cada vez
//que el contenido se haya terminado de cargar
loader=new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,placeImg);
//se carga la primera imagen, para que no aparezca en blanco
loader.load(new URLRequest(ruta+imagesArray[0]));
//se llama una funcion que cargara las imagenes cada cierto tiempo
callTimer();
}
//esta funcion crea un timer que llamara cada tres segundos
//otra funcion que se encargara de cargar las imagenes
private function callTimer():void
{
var timer:Timer=new Timer(3000);
timer.addEventListener(TimerEvent.TIMER,loadItems);
timer.start();
}
//esta funcion carga las imagenes, notaran que las llama de acuerdo al indice del array
//(que se incrementa en cada pasada)
private function loadItems(evt:TimerEvent):void
{
loader.load(new URLRequest(ruta+imagesArray[index]));
}
//esta funcion es la mas compleja, se llama automáticamente cada vez que ha terminado de cargar
//una imagen en el loader.
private function placeImg(evt:Event):void
{
//se pasa el contenido del loader(la imagen) a un display object provisional
var tmp:DisplayObject=loader.content;
//se "limpia" el loader
loader.unload();
//se crea un clip vacío
var clip:MovieClip=new MovieClip();
//se pasa el display obj al clip
clip.addChild(tmp);
//se añade el clip al container
container.addChild(clip);
//este condicional sirve para no aplicarlo al primer item cargado
if(container.numChildren>1)
{
//se vuelve invisible al clip
clip.alpha=0;
//se usa un tween para hacerlo visible
var tween1:Tween=new Tween(clip,"alpha",Regular.easeIn,0,1,1,true);
//listener que llama la funcion kill cuando se acaba el tween
tween1.addEventListener(TweenEvent.MOTION_FINISH,kill);
}
//se incrementa el index
index++;
//esto resetea el index si se pasa del length del array
if(index==imagesArray.length)
{
index=0;
}
}
//esta función borra el clip que quedó oculto(osea, siempre vamos a tener dos clips
//dentro de container)
private function kill(evt:TweenEvent):void
{
container.removeChildAt(0);
}
}
}
: