我正在开发一款带有AS3和AIR的游戏。我需要为显示元素加载大量的图像。不嵌入游戏所需的所有图像会很好,从而避免将它们全部存储在内存中。这在较小的项目中没问题,但在这里没有意义。
我很想知道在运行时加载图像的策略。由于所有文件都非常小并且本地(在我当前的项目中)根据请求加载它们可能是最好的解决方案,但我想听听人们有什么想法来管理它。
对于奖励积分,我也对在服务器端按需加载图像的解决方案感到好奇。
答案 0 :(得分:1)
一个好主意是,创建外部SWF,嵌入可能一起使用的图像,如果可能的话......就像projectiles.swf,barriers.swf,enemies.swf,misc .swf ....我不知道...有意义的东西......可能按级别划分资产,或者某种东西......采用简单的界面,允许你从swf中提取资产......例如,让我们总是有一个类Assets
,它带有一个静态方法getAll
,它返回一个Object,将字符串标识符映射到相应的类,所以你会得到类似的东西:
function onComplete(e:Event) {//this is the handler for the loading operation
var map:Object = (e.target as LoaderInfo).applicationDomain.getDefinition("Assets").getAll();//should return something like {"bullet1":Bullet1,"bullet2":Bullet2,...}
//do whatever you need to do with it
}
的优点:
ByteArray
将图像以二进制形式加载到URLLoader
中,然后使用Loader::loadBytes
将其置于舞台...... 您可能希望使用swfmill在服务器端生成swfs,以自动执行该过程......
格尔茨
back2dos
答案 1 :(得分:0)
为你的项目 你可以使用amfphp和mysql blob-storage来制作解决方案。 在这个链接中你可以理解mysql blob-storage是怎么回事。
http://www.anyexample.com/programming/php/php_mysql_example__image_gallery_%28blob_storage%29.xml
并且对于amfphp,请访问 http://www.amfphp.org/
也请检查这个AMFPHP Live JPEG编码器, http://www.bytearray.org/?p=90
答案 2 :(得分:0)
我最终解决的解决方案是创建一个可重用的单件加载类,它按需管理数据的加载和存储。它管理“作业”,可以是LOCAL或REMOTE,它们存储引用和加载的数据本身,它们在完全加载后映射到管理器类中。
虽然我非常喜欢back2dos的建议,但每次资产变更时管理(重新)创建SWF都不是我的目的。