2010-01-02 72 views
0

我將多個圖像加載到一個類實例中,我想跟蹤在任何給定點上加載數據的完整數量有多大。 我通過PHP腳本從圖像目錄中抓取了總字節數...但是從每個圖像上的ProgressEvent收集新字節似乎很棘手,因爲某些原因。 我們假設totalBytes變量是正確的,並且我完全不熟悉ProgressEvent的工作方式...AS3:從多個來源加載字節

每次ProgressEvent獲取新字節時,都會觸發一個事件嗎?
如果不是,我如何跟蹤當前的總字節數?

我敢肯定,我弄錯了,但這裏是我想:

public function thumbProgress(e:ProgressEvent):void 
{ 
    //trying to check for a new data amount, in case the progress event updates 
    //insignificantly 
    if(e.bytesLoaded != this.newByte) 
    { 
     this.newByte = this.currentLoadedBytes - e.bytesLoaded; 
     this.currentLoadedBytes += this.newByte; 
     this.textprog.text = this.currentLoadedBytes.toString() + "/" + this.totalBytes.toString(); 
     this.newByte = e.bytesLoaded; 
    } 

    if(this.currentLoadedBytes >= this.totalBytes) 
    { 
     this.textprog.text = "done loading."; 
    } 
}

回答

1

您使用的是使用flash.display.Loader加載您的圖片?然後,您可以使用Loader.contentLoaderInfo.bytesTotal屬性的屬性,該屬性在映像加載完成後應包含正確的字節數。 Loader.contentLoaderInfo屬性引用加載內容的LoaderInfo實例,該實例包含大量關於文件的數據,例如總大小,已完成加載的數量以及加載它的URL。檢查出the LoaderInfo reference

爲所有加載器計算此屬性的值,以獲取加載數據的總量,例如,在每個加載器的COMPLETE處理程序中。

乾杯

+0

這似乎是我所期待的。 有趣的是,我從來沒有嘗試添加總onComplete之前。 謝謝。 – jml 2010-01-02 16:54:20

+0

呃,其實我不認爲這會奏效。 我需要INIT處理程序來完成w/r/totalBytes屬性的工作。這個數字在這個時候也應該是可用的嗎? 我不會認爲圖像必須先加載才能訪問它。 – jml 2010-01-02 17:14:21

0

也許這是不完全的回答你的問題,但我建議你看一看bulk-loader庫。這將大大簡化加載多個資產。這是一個快速和骯髒的使用示例。我們使用進度條獲得簡單的應用程序,並且我們希望在下載圖像時更新進度條。

<mx:Script> 
    <![CDATA[ 
     import br.com.stimuli.loading.BulkProgressEvent; 
     import br.com.stimuli.loading.BulkLoader; 


     private function init():void { 
      loadImages(); 
     } 
     private function loadImages():void { 

      var loader : BulkLoader = new BulkLoader("main-site"); 
      loader.add("http://www.travelblog.org/Wallpaper/pix/tb_turtle_diving_sipadan_malaysia.jpg", {id:"a"}); 
      loader.add("http://www.travelblog.org/Wallpaper/pix/tb_fiji_sunset_wallpaper.jpg", {id:"b"}); 
      loader.addEventListener(BulkLoader.COMPLETE, onAllLoaded); 
      loader.addEventListener(BulkLoader.PROGRESS, onAllProgress); 
      loader.addEventListener(BulkLoader.ERROR, onAllError);  
      loader.start();     

     } 

     private function onAllLoaded(evt : BulkProgressEvent):void { 

     } 

     private function onAllProgress(evt : BulkProgressEvent):void { 

      progressBar.setProgress(evt.ratioLoaded * 100, progressBar.maximum); 

     } 

     private function onAllError():void { 

     } 

    ]]> 
</mx:Script> 


<mx:ProgressBar x="304" y="360" width="582" id="progressBar" mode="manual" minimum="0" maximum="100"/> 

+0

我真的不想使用bulkloader lib。我覺得很好...笨重。 :) – jml 2010-01-02 17:19:43