在Flash中按顺序加载文件?

时间:2011-06-16 04:40:49

标签: flash actionscript-3 air

我正在尝试加载一堆图像文件进行处理(准确地制作精灵表)。因此,我需要确保加载这些文件以便进行处理(否则动画会变得非常糟糕)。

我正在使用的代码非常标准:

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

我原本以为,因为装载机在本地运行,它们发射的速度足够快但没有骰子,因此图像不合适。

知道如何解决这个问题并按文件打开对话框的顺序加载它们吗?

感谢。

4 个答案:

答案 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事件。当最后一个到达时,你已经完成了。