AS3 / AIR:管理运行时映像数据

时间:2009-07-21 04:14:23

标签: actionscript-3 memory-management image air

我正在开发一款带有AS3和AIR的游戏。我需要为显示元素加载大量的图像。不嵌入游戏所需的所有图像会很好,从而避免将它们全部存储在内存中。这在较小的项目中没问题,但在这里没有意义。

我很想知道在运行时加载图像的策略。由于所有文件都非常小并且本地(在我当前的项目中)根据请求加载它们可能是最好的解决方案,但我想听听人们有什么想法来管理它。

对于奖励积分,我也对在服务器端按需加载图像的解决方案感到好奇。

3 个答案:

答案 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
}

的优点:

  • 图像相互压缩,因此整体文件大小会减少...
  • 您大幅减少服务器上的请求数...
  • 你不会使用n-100个文件,遵循一些名称/路径约定,甚至不会(也需要在某个地方有一个文件索引,知道哪些文件存在,哪些文件不存在)。 ..
  • 您可以通过加载不同的swf轻松重新打印您的应用,而不是单独加载n-100张图片......
  • 这种方法的最终优点是,您将拥有类,您可以简单地实例化,而不是一遍又一遍地加载图像......第一个操作是同步的,后者不是......如果你真的需要这样做,考虑使用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都不是我的目的。