我加载同一文件的多个 SWF 例:
var movies:Array = new Array ("Symbols/00.swf","Symbols/00.swf","Symbols/00.swf");
我的加载方法工作正常,下面使用:
var perc:int = (event.bytesLoaded / event.bytesTotal) * 100;
Loading.text = "loading " +perc + "%";
我遇到的问题是,iv 从电影:数组下载了一个项目后,加载文本为 %100。
发生这种情况是因为其余文件已经在捕获中。
问题是:我如何能够减慢此加载文本以确定所有项目是否已准备就绪。基本上问题是加载文本说完整,但我所有其他文件还没准备好...
首先,为什么要多次加载一个 SWF?可以使用以下技巧:如何显示已加载 SWF 的多个实例。其次,您使用 Loader 对象一次加载一个 SWF,其进度将与该单个 SWF 相关。因此,首先加载所有唯一的 SWF 并将其加载器引用存储在某个位置,以便在需要时实例化更多这些引用,其次,您将从进度事件侦听器中收集总百分比。后者稍微复杂一些,因为您很可能对所有加载程序使用单个进度事件侦听器。例如,您可以执行以下操作:
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 + "%";
}
请注意,由于加载过程设计为仅运行一次,因此所有初始化都进行一次,并且此代码没有错误处理 - 但是,您可以自己编写。