AS#3加载SWF多个

时间:2012-09-21 03:44:47

标签: actionscript-3 flash actionscript

我正在加载同一文件的多个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中。

问题是: 我怎么能减慢这个加载文本,以确定是否所有项目都准备好了。基本上问题是加载文本说完整但我所有的其他文件 尚未准备好......

1 个答案:

答案 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 + "%";
}

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