2009-06-24 4 views
3

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

    } 

} 

Répondre

6

Ok, c'est compris. Ce:

loader.addEventListener(ProgressEvent.PROGRESS, progress); 
loader.addEventListener(Event.COMPLETE, this.ready); 

devrait lire ceci:

loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, progress); 
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, ready); 

Je ne sais même pas pourquoi le chargeur-Class a la méthode addEvenListener - tout le monde de redondance?

+2

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. –

+0

Cela a du sens ... en quelque sorte, merci! – saibotd

+0

+1 réponse m'a aidé 7 mois plus tard :) – Colin

3

J'ai eu même problème avec l'auditeur faible, les travaux réguliers fin

//BUG event not fired 
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteHandler,false,0,true); 

//OK event fired 
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteHandler); 
Questions connexes