2009-10-13 82 views
1

當我學會了很難的方式時,Flash會對您的.swf進行流式處理,也就是說,即使只加載了第一對幀,它也可以開始播放文件。如何判斷主SWF何時完全加載?

通常情況下,當加載一個外部.swf時,你只需要在Loader或URLLoader類的COMPLETE事件中註冊一個處理程序,那就是它。 實施例(異常處理等省略):

var loader:URLLoader = new URLLoader(); 
loader.addEventListener(Event.COMPLETE, completeHandler); 
loader.load(request); 

function completeHandler(event:Event):void { 
    //trigger starting playback here 
} 

然而,如果.swf文件是「主」 SWF,即,從HTML中引用的一個,我只能訪問root.loaderInfo財產,就是這樣的:

root.loaderInfo.loader.addEventListener(Event.COMPLETE, completeHandler); 

給我的加載對象未充分加載提供此信息的錯誤

,沒有工作,但令我生厭是有一個計時器和輪詢bytesLoaded屬性這樣的解決方法:

var Poller:Timer = new Timer(500, 0); 
Poller.addEventListener(TimerEvent.TIMER, waitForLoad); 
var e:Event; 
waitForLoad(e); 


function waitForLoad(event:Event):void { 
if (root.loaderInfo.bytesLoaded < root.loaderInfo.bytesTotal) { 
    if (!Poller.running) Poller.start(); 
    return; 
} else { 
    Poller.stop(); 
    completeHandler(event); 
} 
} 

必須有比這更好的解決方案。理想情況下,我可以註冊事件處理程序completeHandler Event.COMPLETE到根或舞臺對象的某些屬性,它確實會在文件獲得完全加載時拋出此事件... 有誰知道它是哪個屬性?

乾杯,
佐爾坦

PS:我使用的Adobe Flash CS3

回答

3

而不是

root.loaderInfo.loader.addEventListener(Event.COMPLETE, completeHandler); 

呼叫

this.loaderInfo.addEventListener(Event.COMPLETE, completeHandler); 

從文檔類的構造函數。

+0

它的工作原理!謝謝。 – Zoli2xa 2009-10-13 22:21:28

相關問題