我需要一种方法来保存游戏(控件,图形等)的用户配置并将其加载到文件中。我想以跨平台的方式做到这一点,如果我必须使用库,我希望它们具有足够简单的语法。如何保存和加载配置文件,以及我应该使用哪种格式? XML和INI似乎很受欢迎,但我发现的所有解析器都有令人困惑的语法,我不知道从哪里开始自己的解析器。
顺便说一句,配置文件可能不会太复杂,所以轻量级和快速的东西最好。
抛开 - 我正在考虑使用脚本来定义项目之类的东西,但是像xml这样的标记语言会更好还是脚本语言(比如angelscript,我正在使用的那样)会更好?
答案 0 :(得分:2)
如何制作代表您的配置然后序列化的C ++类?以boost序列化为例。
http://www.boost.org/doc/libs/1_40_0/libs/serialization/doc/index.html
答案 1 :(得分:2)
我使用的Lua重量轻,效果很好as a configuration language。随着岁月的流逝,我开始越来越多地使用Lua脚本,直到核心引擎的所有内容都在Lua中编码。在最新的迭代中,甚至游戏动态也使用回调编码在Lua中,而且性能几乎没有。我不是说你应该这样做但是Lua会让你成长并且很容易在c / c ++中实现。
答案 2 :(得分:2)
我认为,serialization和messaging之间存在长期混淆。
<强>序列化强>
通常是短暂的,包括绕过物体。
正如文章中所述,COM
和CORBA
是其使用的众所周知的例子。
<强>信息强>
关于不同实体之间的沟通。
问题在于,许多人在看到消息传递问题时只想:序列化并完成它。
但这不适应。
对象的问题在于,如果序列化与稳定模型运行良好,那么模型的任何更改都可能会很痛苦。
另一方面,消息传递将消息编码和解码与当前模型相关联,因此,只需在消息的编码和解码中处理对模型的更改,模型为摆脱了向后兼容的负担。
现在,对于配置文件,您可能需要向后兼容。那么选择Messaging解决方案符合您的最佳利益。
我建议Google Protocol Buffers
,因为这是合理且经过验证的。
我不必说明为什么1.重要。 2.意味着您可以手动编辑文件以进行调整,3意味着您可以轻松编写GUI或检查脚本。
答案 3 :(得分:1)
我需要一种方法来保存游戏(控件,图形等)的用户配置并将其加载到文件中。
游戏通常使用专有格式存储配置信息,因为它们经常被滥用(想想破解配置文件以增加你拥有的空余时间或你可以使用的弹药)。这些敏感信息通常以二进制形式编写,并且可以加密。如果没有你需要存储的信息会影响游戏玩法,那么继续使用基于文本/标记/人类可读的格式是完全正确的。二进制格式有各自的问题w.r.t平台等(在这方面查找SO的帖子)。
我正在考虑使用脚本来定义项目之类的东西,但是像xml这样的标记语言会更好还是脚本语言(比如angelscript,我正在使用的那样)会更好?
XML绝对是一个很好的选择,请继续阅读上一节中的评论。它是人类可读的,许多解析器是免费提供的(也很容易写一个)等。脚本完全是一个不同的野兽。你真的需要一个脚本和控制结构和功能吗?这又是一个设计决定,所以由你决定。
没有一个正确的答案。首先,文本/ XML格式对我来说很好。但随着时间的推移和游戏复杂性的增加,你可能需要转向DSL和二进制形式。
答案 4 :(得分:1)
您可能对我Message class中的networking library感兴趣。它允许您方便地存储任何类型的数据,具有您想要包含的层次结构/结构。数据可序列化为平台中立的二进制格式。有适用于C,C ++,Java,Python和C#的API,它易于使用。
我多年来一直用它来存储相当复杂的项目文件,这对我来说很有用。
答案 5 :(得分:0)
很多游戏都将这些设置存储在二进制文件中。它会比XML快,但现在我觉得不重要。也许解释一下你对XML文件有什么麻烦,以便我们可以提供帮助。
答案 6 :(得分:0)
IniParser - 易于使用,标准的ini语法,C但是很容易包装在一个类中。