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

时间:2012-01-08 22:27:53

标签: 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);
}

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

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

感谢您的时间。

3 个答案:

答案 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