2012-02-19 71 views
2

我有一個典型的情況,大循環加載大量的圖像,並完成異步,使瀏覽器在加載過程中釋放,我想讓它同步,但很難做到這一點。我發現這個類synchronous loader和它的工作很好,但你不能添加鼠標事件監聽器加載器。下面是示例代碼:actionscript 3同步加載器

for (var i = 0; i < items.length; i++) { 

      item = items[i]; 

      if(item.layer>1){ 
       ld:Loader = new Loader(); 
       ld.load(new URLRequest(item.url)); 
       ld.rotation = item.rotation; 
       ld.x = item.x ; 
       ld.y = item.y; 
       ld.addEventListener(Event.COMPLETE, loadComplete); 
       ld.scaleX = item.scaleX; 
       ld.scaleY = item.scaleY; 
       ld.addEventListener(MouseEvent.MOUSE_DOWN, select); 
       layers_arr[item.layer].addChild(ld); 
      } 

}

任何想法,這可怎麼辦呢?

+0

爲什麼會加載圖像同步提高性能?您鏈接到的PreLoader也是異步的。它所做的是一次一個地加載圖像*,而不是像你在同一時間一樣。 – sch 2012-02-19 14:56:14

+0

@sch是的,我想要的是真正加載他們一次或最多3-4圖像一次。問題是,當瀏覽器一次加載10個或更多的圖像,然後釋放一段時間。當我使用這個PreLoader類的瀏覽器是好的,但正如我指出的你不能添加鼠標事件監聽器加載器。 – Yovo 2012-02-19 15:07:57

回答

1

的最大數量一樣arieljake說,這裏是如何使用它的一個小例子:

package 
{ 
    import com.greensock.TweenLite; 
    import com.greensock.events.LoaderEvent; 
    import com.greensock.loading.ImageLoader; 
    import com.greensock.loading.LoaderMax; 
    import com.greensock.loading.MP3Loader; 
    import com.greensock.loading.SWFLoader; 
    import com.greensock.loading.XMLLoader; 
    import com.greensock.loading.display.ContentDisplay; 

    import flash.display.Sprite; 
    import flash.display.StageAlign; 
    import flash.display.StageScaleMode; 
    import flash.events.Event; 

    public class Main extends Sprite 
    { 
     public var itemUrl:String; 
     public var queue:LoaderMax = new LoaderMax({name:"mainQueue", onProgress:progressHandler, onComplete:completeHandler, onError:errorHandler}); 

     public function Main() 
     { 
      stage.align = StageAlign.TOP_LEFT; 
      stage.scaleMode = StageScaleMode.NO_SCALE; 

      queue.maxConnections = 1; //Checks how much items that can be loaded at the same time 
      queue.append(new ImageLoader("http://www.myurl.com/myimage.jpg", {name:"photo1", estimatedBytes:2400, container:this, alpha:0,scaleMode:"proportionalInside"})); 
      queue.append(new ImageLoader("http://www.myotherurl.com/awesomeimage.jpg", {name:"photo2", estimatedBytes:2400, container:this, alpha:0, scaleMode:"proportionalInside"})); 

      queue.addEventListener(LoaderEvent.CHILD_COMPLETE, childCompleteHandler); //checks when a child has completed to load 
      queue.addEventListener(LoaderEvent.CHILD_PROGRESS, childProgressHandler); //checks the child progress 

      //prioritize the loader named "photo1" 
      LoaderMax.prioritize("photo1"); //same as LoaderMax.getLoader("photo1").prioritize(); 


      //start loading 
      queue.load(); 



     } 

     protected function childProgressHandler(event:LoaderEvent):void 
     { 
      var procent:Number = Math.floor(event.target.progress*100); 
      var targetName:String = event.target.name; 
      trace(procent+'% loaded of item: '+targetName); 
     } 

     protected function childCompleteHandler(event:LoaderEvent):void 
     { 
      var targetName:String = event.target.name; 
      trace(targetName+' is loaded!'); 
     } 


     private function completeHandler(event:LoaderEvent):void { 

      var objects:Array = event.currentTarget.content; 

      for(var i:uint=0; i < objects.length; i++) 
      { 

       var image:ContentDisplay = LoaderMax.getContent(objects[i].name); 
       TweenLite.to(image, 1, {alpha:1, y:100}); 

      } 
      trace(event.target + " is complete!"); 
     } 

     private function errorHandler(event:LoaderEvent):void { 
      trace("error occured with " + event.target + ": " + event.text); 
     } 
    } 
}