0

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

我遇到的问题是,在我从 Movies:Array 下载了一项后,加载文本位于 %100。

之所以会发生这种情况,是因为其余文件已经在捕获中。

问题是: 我怎样才能减慢这个加载文本来确定所有项目是否都准备好了。基本上问题是加载文本说完成但我所有其他文件还没有准备好......

4

1 回答 1

1

首先,您为什么要多次加载一个 SWF?您可以使用以下技巧:如何显示加载的 SWF 的多个实例。其次,您正在使用 Loader 对象一次加载一个 SWF,其进度将与该单个 SWF 相关。因此,您首先加载所有唯一的 SWF 并将其 Loader 引用存储在某处,以便在需要时实例化更多的 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 + "%";
}

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

于 2012-09-21T04:47:14.443 回答