如何判断主SWF何时满载?

时间:2009-10-13 06:53:40

标签: flash actionscript-3 adobe

当我学到很难的方法时,Flash会流式传输.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到root或stage对象的某个属性,当文件完全加载时它确实会抛出此事件... 有谁知道它属于哪个属性?

干杯,
佐尔坦

P.S。:我正在使用Adobe Flash CS3

2 个答案:

答案 0 :(得分:3)

而不是

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

致电

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

来自文档类的构造函数。

答案 1 :(得分:0)

在AS2中

,试试这段代码。加载进度显示在第一帧,主要内容显示在第3帧。 此代码在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);
}