我有这个代码在我的项目中加载大拇指和完整图像:
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);
}
当我推送为此创建的数组时,图像以未排序的顺序出现。
我的朋友告诉我,它发生了类似的事情:“小文件首先出现”。他告诉我问题在于装载机,但是他无法帮助我。
谁能告诉我什么是错的?
谢谢!
答案 0 :(得分:1)
解决此问题的最佳方法是为您的代码提供更多结构。
首先,创建一个类(让我们称之为ImageLoader),负责加载拇指和完整图像。这将是一个包含2个Loader实例的类。为每个项目创建此类的实例,并在开始之前将它们推送到数组中。
一旦数组已满,请迭代指示ImageLoader实例启动的数组。此方法将依次调用其每个Loader实例的load方法。
两个装载程序完成后,emit a custom ImageLoaderComplete event表示已完成。
在更高级别,在包含ImageLoader实例数组的同一个类中,侦听从每个ImageLoader实例发出的自定义事件。计算它们。当您计算数组中的项目数量时,加载完成,您的数组保持与开始时相同的顺序,拇指和完整图像可以方便地分组。
答案 1 :(得分:0)
看起来您正在循环遍历给定的XML文档,该文档包含图像列表并在循环中异步加载图像。在这样做时,显然较小的图像将首先完成,导致Event.COMPLETE事件触发。发生这种情况是因为您要求闪存立即开始同时加载所有图像。
您可能要做的是先在循环中同步加载图像,方法是先加载第一张图像......当图像Event.COMPLETE执行时,继续加载下一张图像,依此类推,直到完成所有操作。这样做会强制您的应用程序按照XML中定义的顺序加载图像,并且一次加载一个类似于队列的图像。
祝你好运!