J'utilise cette classe pour charger plusieurs images de manière synchrone. D'une manière ou d'une autre le chargeur ne déclenche aucun événement (Event.COMPLETE, ProgressEvent.PROGRESS), étrangement je n'obtiens pas non plus d'erreurs (en utilisant FlashDevelop et Flex3 SDK).L'objet Loader ne distribue pas Event.COMPLETE
package
{
import flash.display.Loader;
import flash.display.Sprite;
import flash.events.*;
import flash.net.URLRequest;
public class MultiImgLoader extends EventDispatcher
{
private var img_array:Array;
public var images:Array;
private var loader:Loader = new Loader();
public function MultiImgLoader(img_array:Array)
{
this.img_array = img_array;
trace("[MultiImgLoader] about to load " + img_array.length);
if (img_array.length > 0)
{
load(img_array[0]);
}
}
private function load(img:String):void
{
trace("[MultiImgLoader] load " + img);
loader.addEventListener(ProgressEvent.PROGRESS, progress);
loader.addEventListener(Event.COMPLETE, this.ready);
var req:URLRequest = new URLRequest(img);
loader.load(req);
}
public function ready(ev:Event):void
{
var key:String = ev.target.contentLoaderInfo.url;
trace("[MultiImgLoader] ready " + key);
images.push({ key : ev.target });
if (img_array.length > images.length)
{
for (var i:int = 0; i < img_array.length; i++)
{
if (img_array[i] == key)
{
load(img_array[i+1]);
}
}
}
}
public function progress(ev:ProgressEvent):void
{
trace(ev.bytesLoaded);
}
}
}
Loader a addEventListener parce qu'il hérite de EventDispatcher. Bien que la classe Loader n'émette pas directement d'événements sur l'état du chargement, elle gère tous les événements habituels de l'interface utilisateur, y compris les événements souris, les événements d'affichage (ADDED_TO_STAGE, ENTER_FRAME, etc.) et les événements clavier. C'est juste que les événements liés au chargement du contenu sont gérés par l'instance intégrée de LoaderInfo appelée contentLoaderInfo. –
Cela a du sens ... en quelque sorte, merci! – saibotd
+1 réponse m'a aidé 7 mois plus tard :) – Colin