我正在为AS3编写一个游戏,它从XML文件中提取数据,解析它并将其组织到不同的对象(自定义AS3类)中。当我尝试思考如何存储图像数据时,它开始变得有点棘手,以及我以后如何初始化它。目前,我将角色的显示对象存储在自定义角色精灵类中。但是,我认为拥有一个巨大的AssetLoader类实际上可能更好,而不是将数据存储在Character类中,而是将它存储在AssetLoader类中的一个大数组中。
这是最有效的方法 - 考虑到可能有数百个角色资产。
答案 0 :(得分:1)
如果可能,每个级别组织资产通常是个好主意。根据关卡的大小,您可能会获得更精细的粒度(例如:关卡被划分为区域;假设玩家从区域A开始,所以你加载区域A的所有资产;现在让我们说他来自A到B通过一些连接门;你从内存中删除所有区域A资产和对象 - 你准备它们进行垃圾收集 - 你现在加载区域B的资产 - 你可以有一个小的加载消息或某些信号指示转换,想一想像暗黑破坏神这样的游戏,有类似的水平加载和区域导航方法。)
如果没有更多细节,是否需要如此细粒度的装载很难说。我建议你从更简单的方法(每个级别的资产)开始,如果真的需要,从那里进行改进。请记住:“过早优化是万恶之源。”
PS:您不应该只为每个级别组织图像数据,理想情况下,您应该组织所有级别信息。如果在实际达到所述级别之前不需要显示特定级别的信息,那么预先加载它就是一种浪费。
PPS:根据游戏的运行位置和大小,您可能需要考虑放弃XML方法并使用数据库(例如:SQLite用于桌面和/或MySQL用于web)用于存储游戏相关数据(包括图像)。 XML往往不够快,维护起来很容易,更不用说你最终可能希望添加真正受益于集中式数据库的新功能(例如:记分板,用户统计,成就等)。
答案 1 :(得分:0)
以XML格式存储图像数据可能不是一个好主意。以二进制格式单独存储图像数据,仅在XML中存储ID或URL。就个人而言,我更喜欢以AMF格式存储所有对象数据,这使得编码和解码变得简单且快速。
答案 2 :(得分:0)
我正在使用这个静态类来共享大型配置XML,一些运行时变量以及100s游戏类之间的一些对象: https://github.com/inruntime/AS3-Global-Object