Flash AS3 - 如何确定当前加载的所有加载程序何时完成.

ale*_*rno 2 flash actionscript-3

我有一些代码,我将几百个图像加载到Flash中的数组中.我正在使用XML传入列表,然后为每个条目添加一个Loader,如下所示 -

for (var i:int = 0; i < myXML.item.length(); i++) {
    imgloaders[i] = new Loader();
    imgloaders[i].load(new URLRequest(myXML.item[i].imageLocation));
    imgloaders[i].contentLoaderInfo.addEventListener(Event.COMPLETE, imageLoaded);
}
Run Code Online (Sandbox Code Playgroud)

所有这些都完成加载后我想执行一些动作.我能想到的唯一方法是每次完成时增加一个计数,并有一个Timer来检查计数是否已达到我正在加载的图像数量.

肯定有比这更好的方式 - 任何人都可以帮忙吗?

谢谢你的时间.

Jon*_*org 5

不久前我为此写了一篇琐碎的课; 如果你愿意,可以随意使用它.

// Joiner.as
package {
//Simple class to wait for several callbacks to finish before calling a single callback.
    public class Joiner {
        private var _count:int;
        private var _completed:int;
        private var _callback:Function;

    public function Joiner(count:int, callback:Function) {
        _count = count;
        _completed = 0;
        _callback = callback;
    }

    public function get count():int {
        return _count;
    }

    public function set count(v:int) {
        _count = v;
    }

    public function trigger() {
        _completed++;
        if( _completed >= _count ) {
            _callback();
        }
    }
}
}
Run Code Online (Sandbox Code Playgroud)

(对于凌乱的缩进感到抱歉).

它像这样使用;

var joiner:Joiner = new Joiner(myXML.item.length(), theFinalCallback);
for (var i:int = 0; i < myXML.item.length(); i++) {
    imgloaders[i] = new Loader();
    imgloaders[i].load(new URLRequest(myXML.item[i].imageLocation));
    imgloaders[i].contentLoaderInfo.addEventListener(Event.COMPLETE, function(e:Event) 
       imageLoaded(e);
       joiner.trigger();
    });
}
Run Code Online (Sandbox Code Playgroud)