我正在开发一个Flash GUI项目,该项目需要在运行时动态加载许多图像。
问题: 目前,每当一个类初始化时,它会从HDD加载其资产(图像),但这通常需要很长时间(例如:我有一个包含100个项目的列表,每个项目具有相同的背景,这是存储在HDD上的PNG图像,但它必须从HDD加载图像100次以呈现列表,因为该项的类被初始化100次)。此外,我希望资产对用户隐藏,因此我想以某种方式将其打包到一个文件中。
解决方案: 我想到了SWC。我听说它是Flash的一种库。但我几乎没有与SWC合作的经验。并且图像太多,需要很长时间才能手动导入并在FLA库中为每个图像添加类名。但是我已经有了一个XML文件,它存储了类名和每个类资产的路径。所以我可以将所有图像加载到变量中,但我不知道如何将该变量实际写入HDD上的SWC文件中,以便稍后将其作为库加载。
[MyButton.png] - 加载到RAM - > [myButton:Bitmap] - 写入HDD上的SWC文件 - > [Assets.swc] - 在运行时导入SWC文件 - > [的addChild(assets.myButton)]
粗体文字是我缺少的部分。
感谢您的时间!非常感谢任何帮助。
答案 0 :(得分:0)
SWC是一个“预编译”的文件,它与swf几乎相同,但实际上并没有“动态创建”。最大的区别是swc是“编译成”swf而不是动态加载的东西。也就是说,您无法在运行时加载swc文件,它是在编译期间提供的。
因此,添加到swc的每张图片都会增加它的'大小,好处是它可以在不同的swf文件之间共享。
现在,如果我理解你错了,请纠正我,但似乎你在使用该图片时从硬盘驱动器重新加载图片?那么链接到图片“Ball.png”的100个“Ball”实例会加载该文件100次?
如果是这种情况,为什么不创建一个ImageManager并让它保留一个已加载图像的实例,然后在使用该图像的所有实例之间共享它?
AFAIK没有简单的方法可以做到这一点,但是如果您对缓存加载图像的示例感兴趣,我写了一篇博文(因为我找不到更好的方法来解决这个问题)。
它很天真,围绕着静态ImageManager,只加载图像,通过url-id缓存它们,然后提供bitmapdata的新实例(如果它们已经全部加载)。但是,它的工作方式就像一个魅力,它总是比从硬盘驱动器加载图像更有效率。
您可以在此处找到博文:http://messer1024.blogspot.se/2012/12/caching-loaded-images-in-as3.html