AS3:等待多个装载程序完成

时间:2011-11-23 08:45:11

标签: flash actionscript-3

我想要加载任意数量的图像。我想加载它们,等到每个都得到一个Event.INIT,然后继续执行程序的其余部分。

我知道我可以通过使用Event.INIT监听器更新并检查一些计数变量来做到这一点,但这是标准方法吗?是否有更优雅或AS特定的方式?

3 个答案:

答案 0 :(得分:2)

您可以将每个加载器存储在一个数组中,并在发送INIT时删除它们

private function onInit(e:Event):void
{
  var loader:Loader = (e.currentTarget as LoaderInfo).loader;
  _loaders.splice(_loaders.indexOf(loader), 1);
  if (_loaders.length == 0)
    //do something
}

你也可以像你说的那样使用计数变量。这没关系,因为加载器不会两次调度INIT。但是你必须从数组中删除加载器或减少错误事件的计数器。

答案 1 :(得分:1)

最好的方法是使用由greensock(TweenMax的开发人员)开发的LoaderMax。

http://www.greensock.com/loadermax/

您可以创建加载组并等待该组的完整事件。代码记录得非常好。

这是一个快速的代码模型,可以让您了解自己的期望:

mediaLoader = new LoaderMax( { name:"mediaLoader" } );
mediaLoader.addEventListener(LoaderEvent.PROGRESS, onMediaLoadProgress);
mediaLoader.addEventListener(LoaderEvent.COMPLETE, onMediaLoadComplete);
mediaLoader.addEventListener(LoaderEvent.ERROR, onMediaLoadError);

for (var i:int = 0; i < 10; i++)
{
    mediaLoader.append(LoaderMax.parse("image_" + i + ".jpg", { estimatedBytes: 100000 }));
}

它还为您提供图像,视频,声音等专用加载器。您可以利用它们,或者只是透明地对待它们。

答案 2 :(得分:0)

没有'标准方法'。正如@Kodiak所说,你必须自己用一些计数器实现它。

但如果您需要更复杂的东西,请查看LoaderMax库。您可以设置'maxConnections'参数来确定它一次加载的内容。