AS#3 加载 SWF 倍数



我加载同一文件的多个 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 + "%";
}

请注意,由于加载过程设计为仅运行一次,因此所有初始化都进行一次,并且此代码没有错误处理 - 但是,您可以自己编写。

最新更新