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来检查计数是否已达到我正在加载的图像数量.
肯定有比这更好的方式 - 任何人都可以帮忙吗?
谢谢你的时间.
不久前我为此写了一篇琐碎的课; 如果你愿意,可以随意使用它.
// 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)