2009-06-24 6 views
3

このクラスを使用して、複数の画像を同期して読み込みます。どういうわけか、ローダーはイベント(Event.COMPLETE、ProgressEvent.PROGRESS)をトリガーしません。不思議なことに、FlashDevelopとFlex3 SDKを使用してもエラーは発生しません。ローダーオブジェクトが送出しない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); 
     } 

    } 

} 

答えて

6

この:

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

このお読みください:

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

をローダクラスはaddEvenListenerメソッドを持っている理由は私も知っていない - 冗長誰を?

+2

LoaderはaddEventListenerをして​​います。 Loaderクラスはロード状況に関するイベントを直接発生しませんが、マウスイベント、表示イベント(ADDED_TO_STAGE、ENTER_FRAMEなど)、キーボードイベントなど、すべての通常のUIイベントを処理します。コンテンツの読み込みに関連するイベントは、contentLoaderInfoというLoaderInfoの組み込みインスタンスによって処理されるということだけです。 –

+0

これは意味があります。どういうわけか、ありがとう! – saibotd

+0

+1の回答は私に7ヶ月後に助けました:) – Colin

3

私は、定期的に作品を弱いリスナーと同じ問題を抱えていた細かい

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

//OK event fired 
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteHandler); 
関連する問題