【问题标题】:Wait to continue code until after Loader.load() has finished loading等到 Loader.load() 完成加载后继续代码
【发布时间】:2012-06-08 03:15:52
【问题描述】:

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

【问题讨论】:

  • 你不能把一个异步函数变成一个同步函数。在完成事件中加载数据后,拥有要运行的代码。

标签: actionscript-3 load bitmapdata


【解决方案1】:
    1234563如果您需要在实际加载之前在舞台上放置一个具有图像大小的位置,这可能会解决您的问题。 1234563你不能只用那一个功能来处理这个问题。这是异步的,所以你需要有合适的架构。尝试围绕事件重新设计事物。

【讨论】:

  • 当然,他也可以使用它,这取决于整个应用程序的架构。我只是习惯于使用附加数据的自定义事件:) .
  • 没错,拥有自己的事件确实具有将BitmapData 添加为事件属性的优势,从而消除了 COMPLETE 处理程序中的一个步骤。
【解决方案2】:

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

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

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

【讨论】:

  • 但是如果在加载程序完成之前我不想发生的事情是整个程序的其余部分怎么办?我正在尝试在以前没有使用它的程序中使用加载器类。我宁愿不重构整个东西,以便它可以与这个类一起工作。
  • @android927 这是一个非常标准的情况,您可以这样做 - 更改您的应用程序,使其在所有依赖项都加载(或加载失败)之后开始。
  • 我希望保持程序的结构完好无损,让每个对象加载它自己的资产,但是依赖这些对象的东西有一个有效的非空 DisplayObject 中断,因为它没有'尚未完成加载。在继续之前等待加载完成是我使用过的所有其他 API(XNA、Slick2D)的标准行为。为什么这个功能在 actionscript 中不可用?
  • @android927 如果您谈论的是 XNA 的 Content.Load<T> 之类的游戏资产,那么您可以在 AS3 中使用 [Embed] 语法,它将这些资产在编译时嵌入到 SWF 中。你可以read more about that in this thread
  • 这适用于所有文件类型吗?我需要程序能够访问文本文件(txt)、图像文件(png 可能还有 svg)和声音文件(可能是 mp3 或 ogg)。这适用于所有这些文件类型吗?
猜你喜欢
  • 1970-01-01
  • 2015-10-04
  • 1970-01-01
  • 2012-01-29
  • 1970-01-01
  • 1970-01-01
  • 2017-05-15
  • 2014-12-19
  • 2016-10-29
相关资源
最近更新 更多