2009-06-13 29 views
1

我需要在後臺加載圖像時做一個簡單的進度指示器。我使用的flash.display.Loader類似乎是標準的方式。問題是,即使我可以看到flash.display.LoaderInfo使用跟蹤以固定的時間間隔觸發ProgressEvent.PROGRESS,但動態更新的文本(或任何其他圖形對象)只會在加載完成時更新一次。它看起來像是顯示更新排隊並在最後只引發一次更新。這是啓動加載功能的簡化版本:使用flash的進度指示器display.display.Loader

public function init() 
{ 
    var loader : Loader = new Loader(); 
    var request : URLRequest = new URLRequest(this.imageSrc); 
    loader.contentLoaderInfo.addEventListener(Event.COMPLETE, imageLoaded); 
    loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, updateProgress); 
    loader.load(request); 
} 

,這是事件處理程序:

private function updateProgress(event : ProgressEvent) : void 
{ 
    progressIndicator.text = event.bytesLoaded + "/" + event.bytesTotal; 
    trace(event.bytesLoaded + "/" + event.bytesTotal); 
} 

我的可能是一個基本的問題道歉。我不經常使用Flash。但在我看來,我正在做一個明智而直觀的事情。它必須是101閃存陷阱。

回答

0

看來答案是相當無聊。我的問題是,在開發工作中,我使用了獨立的Flash播放器(我雙擊SWF文件或在Adove Flash CS3中運行它)。顯然問題在於圖像已經被緩存,導致Event.PROGRESS幾次快速連續調用。當我稍後在瀏覽器中嘗試SWF文件並定期清理瀏覽器緩存時,圖像每次都按預期加載。

我想,令人費解的是,即使圖像被緩存了,我得到了幾個Event.PROGRESS事件(大約3個左右),我認爲這只是一個非常粗糙的問題。如果我測量了兩次事件之間的時間,我可能會更早地發現發生了什麼事情。

3

我只是在一個新的fla中粘貼了你的代碼,並嘗試了一些小的調整(從類到時間軸代碼,沒有什麼大不了)。

import flash.events.ProgressEvent; 

var progressIndicator:TextField = new TextField(); 
addChild(progressIndicator); 
progressIndicator.autoSize = "left"; 
progressIndicator.border = true; 

var loader : Loader = new Loader(); 
    var request : URLRequest = new URLRequest("kernel_params.swf"); 
    loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, updateProgress); 
    loader.load(request); 

function updateProgress(event : ProgressEvent) : void 
{ 
    progressIndicator.text = event.bytesLoaded + "/" + event.bytesTotal; 
    trace(event.bytesLoaded + "/" + event.bytesTotal); 
} 

everthing似乎很好。您是否收到任何錯誤,輸出面板中的任何消息? 也許在代碼的其他地方有類型的東西,因爲你發送的部分看起來很好。

+0

非常感謝您的努力和時間。我想我已經想出了問題所在。我要發佈一個答案。 – 2009-06-13 14:05:55