所以我一直在尝试在AS3中执行类似下面的操作来加载任何图像并在运行时检索其位图数据:
var bitmapData:BitmapData;
var loader:Loader;
var completed:Boolean = false;
public function loadBitData(path:String):BitmapData{
loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
loader.load(new URLRequest(path));
while(!completed){
}
completed = false;
return bitmapData;
}
private function onComplete (event:Event):void{
bitmapData = Bitmap(LoaderInfo(event.target).content).bitmapData;
completed = true;
}
由于加载器不会在单独的线程上加载文件,因此该代码显然会陷入无限循环。如果删除while循环,则该方法将返回null,因为当它到达该语句时,数据尚未加载。然而,它仍然会加载数据。 (我已经使用进度事件检查了这一点并打印了到目前为止已加载的数据量)
我只想让方法加载文件,然后在完全加载后返回BitmapData。在发生这种情况之前,程序应该等待并且不再执行任何代码。对此的任何帮助将不胜感激。
答案 0 :(得分:1)
不,程序不应该等到图像加载完毕。加载数据是异步完成的。
在编程中,异步事件是独立于主程序流发生的事件。异步操作是在非阻塞方案中执行的操作,允许主程序流继续处理。
在加载外部数据时,您的应用程序将继续正常运行。您需要管理onComplete()
方法,以便管理数据完全加载后应该发生的事情。如果您在此之前不希望发生某些事情,请将该代码移到onComplete
处理程序中。
答案 1 :(得分:0)
如果您将使用LoaderMax - 刚开始加载后,您将获得一个具有固定大小的特殊显示对象,该对象将在加载正确的图像时自动更新。如果您需要在实际加载之前在图像大小的舞台上放置一个位置,这可以解决您的问题。
如果你真的需要在没有第三方工具的情况下处理这个问题,或者你需要它来处理不同的事情,只需在数据加载时调度自定义事件,然后让你的应用程序做出反应。只有那一个功能你无法处理这个问题。这是异步的,所以你需要有适当的架构。尝试围绕事件重新设计事物。