AS3 - 无序的XML IMG加载

时间:2009-09-28 23:25:56

标签: xml actionscript-3 image preloader

我有这个代码在我的项目中加载大拇指和完整图像:

private function processXMLHandle(e:Event):void
    {
        var xml:XML = new XML(e.target.data);

        for each (var line:XML in xml.IMAGE)
        {
            var file:String = line.@THUMB;              

            var loader:Loader = new Loader();
            loader.load(new URLRequest(file));

            loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);

            var fileFull:String = line.@FULL;

            var loaderFull:Loader = new Loader();
            loaderFull.load(new URLRequest(fileFull));
            loaderFull.contentLoaderInfo.addEventListener (Event.COMPLETE, completeFullHandler);

        }

        myXMLLoader.removeEventListener(Event.COMPLETE, processXMLHandle);
    }

当我推送为此创建的数组时,图像以未排序的顺序出现。

我的朋友告诉我,它发生了类似的事情:“小文件首先出现”。他告诉我问题在于装载机,但是他无法帮助我。

谁能告诉我什么是错的?

谢谢!

2 个答案:

答案 0 :(得分:1)

解决此问题的最佳方法是为您的代码提供更多结构。

首先,创建一个类(让我们称之为ImageLoader),负责加载拇指和完整图像。这将是一个包含2个Loader实例的类。为每个项目创建此类的实例,并在开始之前将它们推送到数组中。

一旦数组已满,请迭代指示ImageLoader实例启动的数组。此方法将依次调用其每个Loader实例的load方法。

两个装载程序完成后,emit a custom ImageLoaderComplete event表示已完成。

在更高级别,在包含ImageLoader实例数组的同一个类中,侦听从每个ImageLoader实例发出的自定义事件。计算它们。当您计算数组中的项目数量时,加载完成,您的数组保持与开始时相同的顺序,拇指和完整图像可以方便地分组。

答案 1 :(得分:0)

看起来您正在循环遍历给定的XML文档,该文档包含图像列表并在循环中异步加载图像。在这样做时,显然较小的图像将首先完成,导致Event.COMPLETE事件触发。发生这种情况是因为您要求闪存立即开始同时加载所有图像。

您可能要做的是先在循环中同步加载图像,方法是先加载第一张图像......当图像Event.COMPLETE执行时,继续加载下一张图像,依此类推,直到完成所有操作。这样做会强制您的应用程序按照XML中定义的顺序加载图像,并且一次加载一个类似于队列的图像。

祝你好运!