0

所以我一直在尝试在 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。在这种情况发生之前,程序应该等待并且不再执行任何代码。对此的任何帮助将不胜感激。

4

2 回答 2

1

不,程序不应等到图像加载完毕。加载数据是异步完成的。

在编程中,异步事件是独立于主程序流发生的事件。异步动作是在非阻塞方案中执行的动作,允许主程序流继续处理。

在加载外部数据时,您的应用程序将继续正常运行。您的onComplete()方法是您需要管理数据完全加载后应该发生的情况。如果您不希望在那之前发生某些事情,请将该代码移动到onComplete处理程序中。

于 2012-06-03T23:20:19.973 回答
0
  1. 如果您将使用LoaderMax - 刚开始加载后,您将获得一个具有固定大小的特殊显示对象,当加载正确的图像时会自动更新。如果您需要在实际加载图像之前在舞台上放置一个具有图像大小的位置,这可能会解决您的问题。

  2. 如果你真的需要在没有第三方工具的情况下处理这个问题,或者你需要它来做一些不同的事情,只需在数据加载时调度一个自定义事件,然后让你的应用程序做出反应。你不能只用那一个功能来处理这个问题。这是异步的,所以你需要有合适的架构。尝试围绕事件重新设计事物。

于 2012-06-03T23:30:22.663 回答