【问题标题】:AS3: waiting for multiple loaders to completeAS3:等待多个加载器完成
【发布时间】:2011-11-23 08:45:10
【问题描述】:

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

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

【问题讨论】:

    标签: flash actionscript-3


    【解决方案1】:

    您可以将每个加载程序存储在一个数组中,并在它们调度 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 两次。但是您必须从数组中删除加载程序或减少错误事件的计数器。

    【讨论】:

    • 这是有道理的。我认为无论如何我都需要将 loader.content 移动到 Sprites 中,在这种情况下,我可能应该从一开始就摆脱 loader。
    【解决方案2】:

    最好的方法是使用由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 }));
    }
    

    它还为您提供了专门的图像、视频、声音等加载器。您可以利用它们来发挥自己的优势,或者只是透明地对待它们。

    【讨论】:

    • 很好,我不知道加载组。
    【解决方案3】:

    没有“标准方法”。正如@Kodiak 所说,您必须自己使用一些计数器来实现它。

    但是,如果您需要更复杂的东西,请查看 LoaderMax 库。您可以设置“maxConnections”参数来确定一次加载多少东西。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-25
      • 2016-10-16
      • 1970-01-01
      相关资源
      最近更新 更多