我正在尝试加载一堆图像文件进行处理(准确地制作精灵表)。因此,我需要确保加载这些文件以便进行处理(否则动画会变得非常糟糕)。
我正在使用的代码非常标准:
protected function onFileSelect(e : FileListEvent) : void
{
for each(var file : File in e.files)
{
var loader : Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
loader.load(new URLRequest(file.nativePath));
}
}
我原本以为,因为装载机在本地运行,它们发射的速度足够快但没有骰子,因此图像不合适。
知道如何解决这个问题并按文件打开对话框的顺序加载它们吗?
感谢。
答案 0 :(得分:3)
谁在乎加载它们的顺序,只要你最后加载它们?之后,您可以根据需要重新排序。例如,使用数组“保存”打开文件对话框中的相对顺序:
protected function onFileSelect(e : FileListEvent) : void
{
var loaderArray:Array = new Array();
var i:uint = 0;
for each(var file : File in e.files)
{
loaderArray[i] = new Loader();
loaderArray[i].contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
loaderArray[i].load(new URLRequest(file.nativePath));
i++;
}
}
当所有这些都被加载时(你可以计算COMPLETE事件,如alxx所说)你在loaderArray [0]中有第一个图像,在loaderArray [1]中有第二个图像等。
答案 1 :(得分:1)
虽然我会采用danii建议将Loader对象存储在有序数组中的方法,但您可以采取的另一种方法是在完整函数中读取加载器URL,然后将加载的图像放入容器中(无论它是什么)使用该URL对它们进行排序。
这个想法是你不知道他们加载了什么顺序,但你可以使用文件名将它们按正确的顺序排序。
答案 2 :(得分:0)
我认为当你使用'for each'时,你不能保证任何特定的顺序,而不是循环通过集合中的每个索引来确保顺序。
此外,绝对无法保证每次加载都会按照您开始的顺序完成。在开始第二次之前,你必须等到第一个完成。
答案 3 :(得分:0)
按顺序获取数组中的加载器,开始加载并计算COMPLETE事件。当最后一个到达时,你已经完成了。