将数据存储在 SWF 文件中,无需解析它们
Posted
技术标签:
【中文标题】将数据存储在 SWF 文件中,无需解析它们【英文标题】:Store data in SWF file without need to parse them 【发布时间】:2013-05-16 15:07:28 【问题描述】:我正在制作一个 Flash 游戏,我需要一种方法来存储有关世界的大量数据,例如在整个游戏中、所有游戏之间保持不变的数据。许多值(整数、浮点数、字符串),按对象层次结构分组。关键是在开发过程中易于编辑(如普通文本文件或 XML),读取数据时性能开销为零,启动时开销最小。
问题可以简化为:如何将所有字段都填写在 SWF 文件中的即用型 ActionScript 对象放入(无需对其运行 init 函数)?
首先想到的是 MXML 是一种方式,但我不知道应该如何使用它来完成工作 - 更不用说可能的开销(我读过 MXML 很慢)。甚至可以在不需要解析事物的情况下这样做吗?如果不是,最好的选择是什么? XML? JSON?自定义格式和解析器函数?
【问题讨论】:
MXML 不是用来存储数据的,它是关于实例化图形组件的。为什么不创建一个包含常量的类并编辑这个类? 你可以在空中做吗? 您可以创建自定义类并将其保存到共享对象(或文本文件,如果使用 AIR)。这很容易做到。 查看我对这个问题的回答:***.com/questions/15667848/… 【参考方案1】:让你想保存的类实现IExternalizable(不要忘记实际编写必要的函数;))。使用 registerClassAlias 使 Class 可用于 AMF 编码。
然后将类写入 ByteArray(使用 ByteArray.writeObject())并压缩它。之后,将 ByteArray 写入文件。
读取文件时,将内容读取到 ByteArray,使用 decompress(),然后使用“readObject() as YOURCLASS”取回您的实例。
如果您愿意,您可以省略压缩,但根据存储的数据,它会产生巨大的差异。在我目前正在做的一个项目中,未压缩的文件大约需要 6MB,压缩版本只有 178KB。
【讨论】:
看起来很简单。明天将检查这种方法。谢谢。以上是关于将数据存储在 SWF 文件中,无需解析它们的主要内容,如果未能解决你的问题,请参考以下文章