【问题标题】:array of loaders?装载机阵列?
【发布时间】:2010-02-21 20:28:41
【问题描述】:

如何创建一个加载器数组?

大局:

我用 flex 编写了一个映射程序。我想更改我的映射程序,以便我需要做的就是放入一个新的 xml 文件,而不是进入我的 flex 文件并添加我需要的确切数量的项目加载器。所以我想我正在寻找一组可以加载我的 XML 文件中的图像文件的加载器。

xml文件示例:

<locations>
      <location>
        <name>Big Star</name>
        <street>123 Some St.</street>
        <city>City</city>
        <state>XX</state>
        <zip>555555</zip>
        <lat>12.34567</lat>
        <long>-67.54321</long>
        <iconFile>bigStar_icon.gif</iconFile>
        <imageFile>bigStar_img.swf</imageFile>
        <motion>no</motion>
        <featured>yes</featured>
        <category>Grocery</category>
      </location>
</locations>

这个 xml 有时可以有 2000 个位置。

【问题讨论】:

  • 如何创建数组?

标签: apache-flex actionscript-3 arrays loader


【解决方案1】:

是的,这是一个非常糟糕的问题。从字面上看(如果开玩笑的话):

var loaders:Array = [new Loader(), new Loader()];

试图读懂你问的内容,听起来你正试图加载一大堆东西并以某种方式将它们全部加载在一起......如果你不得不问,你会很挣扎。

不过,您可以尝试使用 Bulk Loader 库,它可以很好地为您做到这一点。可能还有其他人。

【讨论】:

  • 我正在尝试创建从 xml 中指定的文件名加载 swf 的加载器,所以我不知道如何创建所有这些加载器。有没有更好的方法来解决它?
【解决方案2】:

不是直接回答这个问题,因为它有点含糊 + @alecmce 已经给出了答案(在这种情况下,我也会选择像 BulkLoader 这样的加载器队列)。

但是,由于前段时间我注意到一个类似的问题,我只想指出一次实例化所有加载器感觉有点不对。

只存储url并处理它们不是有点合适吗?

基本示例: (注意我没有测试就输入了...)

// So here's the point: only Strings are stored ... 
var urls:Array = new Array('image1.jpg','image2.jpg',image3.jpg);  

loadNext();

function loadNext()
{
    if(urls.length() == 0)
        return;

     load(urls.shift())
}

function load(url:String):void
{
    // The loader is created lazily just before before we need it
    var loader:Loader = new Loader(new URLRequest(url));
    loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoaded)
    loader.load(url);

}

function onLoaded(e:Event):void
{
     event.target.removeEventListener(Event.COMPLETE, onLoaded);
     addChild(event.target.content); // ... or whatever has to happen here.
     loadNext();
}

【讨论】:

  • 这是 Theo 的一种有趣的方法,但我会警告不要这样做。如果您使用 Loader 加载某些内容,然后将其内容删除到不同的显示对象中,您将很难再次将其从内存中删除。
  • 您也失去了将 Loader 添加到 stage 本身并在资产准备好时让资产出现的好处,这意味着您在代码中添加了竞争条件。假设您加载了一堆行星并想要定位和调整它们的大小,但是位置和缩放逻辑不会等待加载周期完成......如果所有行星都存储在加载器中,那么您可以即使在内容加载之前,也可以定位加载器并定位和缩放它们。这不是错误的方法,只是需要思考!
  • 现在我有一个函数可以创建所有加载器并加载它们而无需等待 COMPLETE。
  • @alecmce - 是的,我同意。我总是使用加载管理器,所以我不必太担心内存管理。仍然我真的倾向于从不初始化对象,除非我直接需要它们(延迟初始化)作为经验法则。如果有 DisplayContainers 用要加载的对象“填充”,我使用 getter 提供“资产代理”以由加载管理器处理。然而,这是特定于框架的方法,在这个例子中,我只是想提示一种不同的方法......我想这最终有点个人化:) 谢谢你指出,T.
猜你喜欢
  • 2015-01-20
  • 1970-01-01
  • 1970-01-01
  • 2019-06-23
  • 2012-04-04
  • 2017-08-26
  • 2012-01-01
  • 2012-01-10
  • 1970-01-01
相关资源
最近更新 更多