0

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

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);
    }

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

我的朋友告诉我,它正在发生这样的事情:“小文件首先出现”。他告诉我问题出在装载机上,但他无能为力。

谁能告诉我怎么了?

谢谢!

4

2 回答 2

1

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

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

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

两个 Loader 都完成后,发出一个自定义 ImageLoaderComplete 事件,指示它已完成。

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

于 2009-09-28T23:56:18.393 回答
0

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

您可能想要做的是通过首先加载第一个图像来在循环中同步加载图像......当该图像 Event.COMPLETE 执行时,继续加载下一个图像,依此类推,直到它们全部完成。这样做,将强制您的应用程序按照 XML 中定义的顺序加载图像,并且一次加载一个,有点像队列。

祝你好运!

于 2009-09-28T23:37:02.847 回答