当我学到很难的方法时,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
答案 0 :(得分:3)
而不是
root.loaderInfo.loader.addEventListener(Event.COMPLETE, completeHandler);
致电
this.loaderInfo.addEventListener(Event.COMPLETE, completeHandler);
来自文档类的构造函数。
答案 1 :(得分:0)
,试试这段代码。加载进度显示在第一帧,主要内容显示在第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);
}