我正在加载同一文件的多个SWF 例如:
var movies:Array = new Array ("Symbols/00.swf","Symbols/00.swf","Symbols/00.swf");
我的加载方法正常,在im下使用:
var perc:int = (event.bytesLoaded / event.bytesTotal) * 100;
Loading.text = "loading " +perc + "%";
我遇到的问题是,从电影:数组中下载了一个项目后,加载文本的值为%100。
这会发生,因为剩余文件已经在catch中。
问题是: 我怎么能减慢这个加载文本,以确定是否所有项目都准备好了。基本上问题是加载文本说完整但我所有的其他文件 尚未准备好......
答案 0 :(得分:1)
首先,为什么要多次加载一个SWF?您可以使用以下技巧:How to display multiple instances of loaded SWF。第二,您使用Loader对象一次加载一个SWF,其进度将与该单个SWF相关。因此,您首先加载所有唯一的SWF并将其Loader引用存储在某处,以便在需要时实例化更多这些SWF,其次,您将从progress事件侦听器中收集总百分比。后者稍微复杂一些,因为您最有可能为所有加载器使用单个进度事件侦听器。例如,您可以执行以下操作:
public static var ALL_LOADERS:Object;
public static var PROGRESS_DATA:Object; // we need associative arrays here
public static var BYTES_LOADED:int=0;
public static var TOTAL_BYTES:int=0;
public static function RegisterLoader(path:String,loader:Loader):void {
if (!ALL_LOADERS) ALL_LOADERS=new Object();
if (!PROGRESS_DATA) PROGRESS_DATA=new Object();
ALL_LOADERS[path]=loader;
PROGRESS_DATA[loader]=new Object();
PROGRESS_DATA[loader].bytesLoaded=0;
PROGRESS_DATA[loader].bytesTotal=-1;
}
// now a listener
public static function progressListener(e:Event):void {
var l:Loader=e.target as Loader;
if (!l) return; // that wasn't a loader that sent the event. Uh oh
var plo:Object=PROGRESS_DATA[l];
if (!plo) return; // unregistered loader. Ignore
if (plo.bytesTotal<0) {
plo.bytesTotal=e.bytesTotal;
TOTAL_BYTES+=e.bytesTotal;
}
var pbl:int=plo.bytesLoaded;
plo.bytesLoaded=e.bytesLoaded;
LOADED_BYTES+=(e.bytesLoaded-pbl);
var perc:int = (LOADED_BYTES / TOTAL_BYTES) * 100;
Loading.text = "loading " +perc + "%";
}
注意,由于加载过程只设计为运行一次,因此所有初始化都进行一次,并且此代码没有错误处理 - 但是,您可以自己编写。