Estoy creando un clase que carga en el escenario las imagenes indicadas en una lista(Array), una al lado de la otra. El problema es que no las carga en el orden que estan en la lista.
Creo que el problema está en utilizar el loop for, ya que creo que salta a la siguiente iteración cuando aún no se ha cargado la imagen actual. Entiendo que habria que hacerlo mediante Eventos, pero no se como hacerlo. ¿Alguna sugerencia?
Muchas gracias.
Clase Main.as:
Código :
package
{
import flash.display.Sprite;
import flash.events.Event;
import ImageLoader;
public class Main extends Sprite
{
private var _imageFileNames:Array;
private var _imageLoader:ImageLoader;
private var _container:Sprite = new Sprite();
private var _offsetX:Number = new Number();
public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
// entry point
_imageFileNames = new Array("1.jpg", "2.jpg","3.jpg", "4.jpg","5.jpg","6.jpg");
for (var index:uint = 0; index < _imageFileNames.length; index++)
{
var imageLoader:ImageLoader = new ImageLoader(_imageFileNames[index]);
imageLoader.addEventListener(ImageLoader.LOADED, imageLoaded);
}
addChild(_container);
}
private function imageLoaded(e:Event):void
{
var image:Sprite = new Sprite();
image = e.target as Sprite;
image.x = _offsetX;
_offsetX += image.width;
_container.addChild(image);
}
}
}
Clase ImageLoader:
Código :
package
{
import flash.display.Sprite;
import flash.display.Loader;
import flash.events.EventDispatcher;
import flash.net.URLRequest;
import flash.events.Event;
public class ImageLoader extends Sprite
{
public static var LOADED:String = "loaded";
private var _urlAsset:String;
private var _image:Sprite;
public function ImageLoader(asset:String):void
{
_urlAsset = asset;
if (asset != null)
{
iniLoad();
}
}
private function iniLoad():void
{
_image = new Sprite();
var loader:Loader = new Loader();
var dispatcher:EventDispatcher = loader.contentLoaderInfo;
loader.load(new URLRequest(_urlAsset));
dispatcher.addEventListener(Event.INIT, registreContent);
addChild(loader);
}
private function registreContent(e:Event):void
{
_image = e.target.content as Sprite;
dispatchEvent(new Event(ImageLoader.LOADED));
}
}
}
