2011-06-16 72 views
1

我试图加载一堆图像文件进行处理(使精灵表单精确)。因此,我需要确保这些文件被加载以便进行处理(否则动画会变得不可思议)。在Flash中按顺序加载文件?

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

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

我认为当你使用'for each'时,你不能保证任何特定的顺序,而不是循环确保集合中确保顺序的每个索引。

此外,绝对不能保证每次加载都会以您开始的相同顺序完成。在开始第二个之前,你必须等到第一个完成。

0

根据需要获取您的装载机,开始装载并计算COMPLETE事件。当最后一个到达时,你就完成了。

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

尽管我会采用danii提出的将Loader对象存储在有序数组中的方法,但另一种方法是读取完整的加载器URL函数,然后将加载的图像放入容器(不管它是什么),使用该URL对它们进行排序。

这个想法是,你不知道它们加载的顺序,但是你可以使用文件名将它们按照正确的顺序排序。