0

我仍然无法理解一些简单的事情在 AS3 中是如何变得更难的。在这里,我想在函数中加载位图,并在完成时返回其值以让应用程序继续。这样的东西很容易使用:

var imageLoader:Bitmap;

for (var i:int=0; i<n.length; i++) {
    imageLoader = loadFile(name[i]);
    trace(imageLoader); // [object Bitmap]
}

function loadFile(name:String):Bitmap {
   imgLoad:ImageLoader = new ImageLoader(url + name)
   imgLoad.addEventListener(LoaderEvent.COMPLETE, fileLoaded);
   imgLoad.load;

   function fileLoaded(ev:LoaderEvent) {
      return ev.target.content; // the file now loaded is a bitmap.
   }
}

但它不起作用。返回值必须在 loadFile() 的末尾。我真的不明白我应该怎么做才能让我的代码优化和工作。第一次尝试时,我使用了类似“loopingLoad”的方法和“_Count:int”和“_CountEnd”来知道何时停止调用loadFile……嗯,它工作得很好,但它真的很难看。所以,我想知道如何用“For”简单地加载几个文件。

谢谢你的帮助。

4

1 回答 1

2

你基本上想要同步加载。不,您不能直接执行此操作,您必须执行一种变通方法以将加载的位图提供给其他地方。不过,这将使您重新考虑整个应用程序逻辑,至少是您希望加载图像的部分。

为了使用 for 循环加载多个文件,您需要执行以下操作:首先,创建一个加载器数组,每个加载器都有一个附加的Event.COMPLETE侦听器。其次,当其中一个加载器完成时,应通知您的应用程序,提供索引或内容链接,或两者兼而有之。

var loaders:Array=new Array();
...
for (var i:int=0;i<urlArray.length;i++) {
    // urlArray is the array with links to bitmaps
    var l:Loader=new Loader();
    l.addEventListener(Event.COMPLETE,onComplete);
    l.load(new URLRequest(urlArray[i]));
    loaders.push(l); // store it, if you want
    // do other stuff, like preparing to accept an image
} // and that's all, you initiate and wait!
...
function onComplete(event:Event):void {
    var i:int=loaders.indexOf(event.target); // get the index
    event.target.removeEventListener(Event.COMPLETE,onComplete);
    if (i<0) return; // oops! 
    notifyApplication(event.target.content); // now you transfer a ready bitmap
    // add "i" if you need that index of your former "for" loop here
}
于 2013-04-09T11:26:26.247 回答