我仍然无法理解AS3中的一些简单事情是如何变得更难的。在这里,我想在一个函数中加载一个Bitmap,并在Complete上返回它的值,让app继续。 这样的东西很容易使用:
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()的末尾。我真的不明白我该怎么做才能让我的代码得到优化和工作。我第一次尝试使用像“_Count:int”和“_CountEnd”这样的“loopingLoad”方法来知道何时停止调用loadFile ......好吧,它工作得很好但是真的很难看。所以,我想知道如何简单地用“For”加载几个文件。
感谢您的帮助。
答案 0 :(得分:2)
你基本上想要同步加载。不,你不能直接这样做,你必须执行一个变通方法来向其他地方提供一个加载的位图。但是,这将使您重新考虑整个应用程序逻辑,至少是您希望加载图像的部分。
为了使用for循环加载多个文件,您需要执行以下操作:首先,创建一个Loaders数组,每个数组都有一个附加的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
}