【发布时间】:2011-11-23 08:45:10
【问题描述】:
我想加载任意数量的图像。我想加载它们,等到每个都得到一个 Event.INIT,然后才继续执行程序的其余部分。
我知道我可以通过更新 Event.INIT 侦听器并检查一些计数变量来做到这一点,但这是标准方法吗?有没有更优雅或特定于 AS 的方式?
【问题讨论】:
标签: flash actionscript-3
我想加载任意数量的图像。我想加载它们,等到每个都得到一个 Event.INIT,然后才继续执行程序的其余部分。
我知道我可以通过更新 Event.INIT 侦听器并检查一些计数变量来做到这一点,但这是标准方法吗?有没有更优雅或特定于 AS 的方式?
【问题讨论】:
标签: flash actionscript-3
您可以将每个加载程序存储在一个数组中,并在它们调度 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 两次。但是您必须从数组中删除加载程序或减少错误事件的计数器。
【讨论】:
最好的方法是使用由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 }));
}
它还为您提供了专门的图像、视频、声音等加载器。您可以利用它们来发挥自己的优势,或者只是透明地对待它们。
【讨论】:
没有“标准方法”。正如@Kodiak 所说,您必须自己使用一些计数器来实现它。
但是,如果您需要更复杂的东西,请查看 LoaderMax 库。您可以设置“maxConnections”参数来确定一次加载多少东西。
【讨论】: