我有一些代码,我在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);
}
我想在所有这些加载完成后执行一些操作。我能想到的唯一方法是每次完成一次计数,并有一个Timer来检查计数是否已达到我正在加载的图像数量。
肯定有比这更好的方法 - 任何人都可以帮忙吗?
感谢您的时间。
答案 0 :(得分: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();
}
}
}
}
(对于凌乱的缩进感到抱歉)。
它像这样使用;
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();
});
}
答案 1 :(得分:2)
我不知道有关flash / action-script的具体内容,我可以说我之前使用过这种模式:
onImageLoadedEvent
{
count++;
if (count == NUM_IMAGES)
{
doSomething();
}
}
这与你在问题中的建议基本相同,只是不需要计时器来检查计数。
答案 2 :(得分:0)
通过greensock查看LoaderMax,这是一个非常强大的库,用于加载许多有用的方法来分组和监视多个加载器对象http://www.greensock.com/loadermax