0

我正在开发一个 Flash GUI 项目,其中有许多图像需要在运行时动态加载。

问题: 目前,每次类初始化时,它都会从 HDD 加载其资产(图像),但这通常需要很长时间(例如:我有一个包含 100 个项目的列表,每个项目都有相同的背景,这是一个存储在HDD,但它必须从 HDD 加载图像 100 次才能呈现列表,因为项目的类要被初始化 100 次)。另外,我希望对用户隐藏资产,因此我想以某种方式将其打包到一个文件中。

解决方案: 我想到了SWC。我听说它是​​一种用于 Flash 的库。但我几乎没有使用 SWC 的经验。并且图像太多,手动导入并将每个图像的类名放入 FLA 库中需要很长时间。但我已经有一个 XML 文件,它存储类名和每个类资产的路径。所以我可以将所有图像加载到一个变量中,但我不知道如何将该变量实际写入 HDD 上的 SWC 文件,以便稍后将其作为库加载。

[MyButton.png] --加载到 RAM --> [myButton:Bitmap] --写入 HDD 上的 SWC 文件--> [Assets.swc] --在运行时导入 SWC 文件--> [addChild(assets.我的按钮)]

粗体字是我缺少的部分。

谢谢你的时间!任何帮助是极大的赞赏。

4

1 回答 1

0

SWC 是您“预编译”的文件,它与 swf 几乎相同,但实际上没有您“即时创建”的内容。最大的区别是 swc 是“编译成”一个 swf 而不是动态加载的东西。也就是说,您不能在运行时加载 swc 文件,它是在编译时提供的。

所以,添加到 swc 的每张图片都会增加它的大小,好处是它可以在不同的 swf 文件之间共享。

现在,如果我理解错了,请纠正我,但似乎每当使用该图片时,您都会从硬盘驱动器重新加载图片?那么链接到图片“Ball.png”的“Ball”的 100 个实例会加载该文件 100 次?

如果是这样的话,为什么不创建一个 ImageManager 并让它保留一个已加载图像的实例,然后在使用该图像的所有实例之间共享它呢?

AFAIK 没有简单的方法可以做到这一点,但是如果您对缓存加载图像的示例感兴趣,我写了一篇博文(因为我找不到更好的方法来为您提供该解决方案)。

它非常幼稚并且围绕静态 ImageManager 旋转,仅加载图像,通过它们的 url-id 缓存它们,然后如果它们已经加载,则提供位图数据的新实例。然而,它就像一个魅力,它比总是从硬盘驱动器加载图像更有效率。

您可以在此处找到博客文章:http: //messer1024.blogspot.se/2012/12/caching-loaded-images-in-as3.html

于 2012-12-10T19:52:03.950 回答