AS3 - 了解[嵌入]元数据的工作原理

时间:2015-04-07 18:29:48

标签: performance actionscript-3 embed loading sprite-sheet

在开发游戏时,我通常使用装载程序加载我的资源,同时在装载完成之前收听,甚至在与我加载的每个对象进行交互之前。

然而,我发现人们正在使用Embed以便加载"图像和精灵表,以提高性能等。所以我做了,但我不明白它是如何实时工作的。我的游戏正在网络上运行,我怎么能确定嵌入式图像是否已加载并可以使用?我理解在本地运行时编译项目时会加载它,但在网络上或移动设备上运行时会发生什么?

我做这样的事情:

public final class Assests 
{
    [Embed(source="../assets/character.png")]
    public var Character:Class;
    public var characterBMD:BitmapData = new Character().bitmapData;
}

如果要加载图形色调怎么办?在向用户显示加载屏幕的同时,我可以随时收听,就像通常通过加载程序类一样。

2 个答案:

答案 0 :(得分:1)

Embed,顾名思义,将资产嵌入swf文件本身。因此,不需要加载,因为它作为swf文件的一部分加载(以及嵌入在swf中的代码和任何其他资产)。这相当于在Flash Professional中拥有库资源。您的所有资产都是SWF文件的一部分。

在加载swf文件后,使用Loader加载单独的资源。

因此,嵌入会增加swf的大小(并导致整个swf加载更慢)。

事后加载Loader,使初始swf打开得更快,然后允许您异步加载并显示进度条或在加载过程中执行其他操作。它还允许您拥有动态加载的内容。因此,您可以执行诸如确定用户屏幕分辨率之类的操作,并为该用户加载更高分辨率的图像(如果他们的系统可以从中受益)。

通常,使用Loader加载最适合大文件。嵌入对于许多小文件或任何您需要的东西都很有用。

答案 1 :(得分:0)

当您使用[Embed]将资产编译到SWF中时,运行时无需额外加载。在您的AS3执行时,资产已准备好使用。

这加快了初始加载时间,因为资源中的加载有很多开销[相对而言]当它直接嵌入SWF时可以跳过,但是权衡是SWF本身变得更重而且你有别无选择,只能使用SWF加载嵌入式资产。