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

AS3 - Understanding how [Embed] metadata works

在开发游戏时,我通常使用加载程序加载我的资产,同时在与我正在加载的每个对象交互之前听取加载完成的时间。

不过,我发现人们使用 Embed 是为了 "load" 图像和 sprite 表,为了提高性能等等。所以我做到了,但我不明白它实际上是如何实时工作的。我的游戏在网络上 运行,我如何确定嵌入式图像已加载并可以使用?我知道它是在本地 运行 编译项目时加载的,但是当 运行 在网络或移动设备上时会发生什么?

我正在做这样的事情:

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

如果有图形色调要加载怎么办?我如何在准备就绪时收听,同时向用户显示加载屏幕,就像通常通过加载程序 Class.

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

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

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

事后使用 Loader 加载,使初始 swf 打开更快,然后允许您异步加载并在加载期间显示进度条或做其他事情。它还允许您动态加载内容。所以你可以做一些事情,比如确定用户的屏幕分辨率,并为该用户加载更高分辨率的图像,如果他们的系统会从中受益的话。

一般来说,使用 Loader 加载大文件是最好的。嵌入非常适合大量小文件或任何您需要立即可用的内容。

当您使用 [Embed] 时,它会将资产编译到 SWF 中,因此在运行时没有额外的加载。当您的 AS3 开始执行时,资产就可以使用了。

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