如何判断主SWF何时完全加载?

问题描述:

当我学会了很难的方式时,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

而不是

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

呼叫

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

从文档类的构造函数。

+0

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

在AS2中,试试这个代码。第一帧加载进度显示,第三帧显示主要内容。 此代码位于ActionScript 2.0参考(getBytesLoaded)中。 http://help.adobe.com/ko_KR/AS2LCR/Flash_10.0/00001304.html#1333866

if (this._framesloaded<this._totalframes) { 
    this.gotoAndPlay(1); 
} else { 
    this.gotoAndStop(3); 
}