这是一个C#问题。
如果有人试图在* .cs文件中存储他们的数据(例如配置文件),而不是XML,我只是在徘徊?
我真的很讨厌XML。每次需要一些数据时解析类似html结构的整个想法似乎都很愚蠢。
XML是否有轻量级替代品(如YAML)? 在我的情况下,我实际上需要为(游戏)级别存储一些数据,其中有很多不同的对象,地形类型等...在平面文件中,所以我可以稍后阅读。
我想我可以序列化我的 Level 类,但我希望数据文件可以在任何文本编辑器中编辑。
欢迎任何帮助,谢谢!
PS:关于.cs文件,我忘了提到我希望能够通过编辑器在游戏中创建(并保存)新关卡。
答案 0 :(得分:3)
我一直在游戏行业工作多年,我们使用XML因为它得到了最好的工具支持。 Yaml或Ini文件用于配置,但游戏数据以XML格式存储。当然,我们通常拥有将XML转换为二进制代码的工具,用于发布游戏,但在开发和自定义游戏工具开发过程中,XML只是摇滚。
有时候XML是满足您需求的最佳选择,不要因为它们在某些领域不是最好而对技术产生偏见(比如说Ajax(传输)和数据定义)
答案 1 :(得分:2)
为什么不(xml)?
我没有看到不使用XML的情况,特别是考虑到你想在文件中存储不同类型的信息。
也就是说,对于.cs文件方法,我建议构建应用程序代码,以便加载初始化所需数据的代码,而不是在文件中查找数据。它为您提供了一个清晰的模式(编译+加载),因为您现在正在加载初始化类,而不是将数据查找到文件中。尽可能地添加尽可能简单的配置。
答案 2 :(得分:2)
由于您不想使用XML,我建议您创建自己的文本可编辑文件格式。
PROPERTIES
name = First Level
number = 1
END
MONSTERS
Barbarian
pos = (3, 6)
health = 2
Dragon
pos = (10, 10)
health = 8
END
依旧等等,无论你需要什么。
自己创建解析器非常简单。几乎只是逐行读取文件。 在第一行,您会看到标题是属性,因此您可以读取属性,直到您在END行中读取。您拥有的任何其他标题也是如此。您可以通过多种方式改变这种情况,因此您可以根据需要制作语法。
答案 3 :(得分:1)
ini文件?
[section]
key=value
在更多地阅读您的问题并思考之后,XML在游戏行业中非常标准,因为它的结构,支持儿童以及任何文本编辑器都可以手动编辑。
一些想到使用XML文件的游戏:
魔兽世界
孤岛危机
指挥&征服3
答案 4 :(得分:1)
每次需要一些数据时解析类似html结构的整个想法似乎都很愚蠢。
如果您不打算使用XML或YAML,那么您将不得不编写自己的解析器和验证器,现在您已经进入了愚蠢统治的土地。 XML因为所有人的离开而烦人,但没有用于操纵它的工具生态系统更糟糕。
答案 5 :(得分:1)
我们喜欢配置文件的JSON - 它的功能非常多。
易于手动编辑,易于解析和删除生成(包括用于.NET的强大的库 - 包括MS和第三方),并且功能非常强大 - 具有良好基本数据类型的XML。
答案 6 :(得分:0)
如果您的数据不是太复杂或分层,您可以将其存储为属性文件格式,如下所示:
level.name=My Level
level.mapfile=Map.txt
等
另一方面,XML在C#中使用序列化(ISerializable或DataContract)非常容易使用,您不必编写任何解析代码,框架会为您完成所有操作。在文本编辑器中编辑XML不会那么糟糕!
如果您愿意稍微妥协一下,可以使用NameValueCollection来保存配置项。然后,您可以使用内置的.NET序列化对其进行序列化。该文件将是XML,但它将采用非常简单,易于编辑的格式,您不必担心任何手动类型转换/验证。
答案 7 :(得分:0)
Donno如果你以前听说过,但你应该查看这个YAML的事情。它很酷,有its own homepage
和一切。
答案 8 :(得分:0)
XML甚至认为非常沉重,通常是将数据存储在文件中的最佳选择,LINQ for XML确实使得读取和写入数据变得更加容易。
如果您的数据变得非常复杂,另一个选择是使用类似SQLite的东西,我之前使用过它,对于单用户访问它真的非常快速且易于使用。
答案 9 :(得分:0)
听起来你想要一种可以在文本编辑器中编辑的二进制格式。不幸的是(直到每个人都能熟练使用十六进制编辑器),速度和编辑的简易性之间存在着不可避免的折衷。
由于二进制格式基本上是对您的状态进行编码的最小字节集的非常密集的打包,因此解析起来既快速又容易。另一方面,XML格式很容易编辑。一种可能的解决方案是创建两者并构建一个在它们之间进行转换的简单程序。然后,您的超级用户将使用此程序将您的级别转换为XML,编辑它们然后将其转换回来。
如果你最终在这种情况下使用XML,我建议你使用多个文件,也许每个对象一个。听起来你打算拥有一个复杂的世界。把它砍掉一点是有意义的。
答案 10 :(得分:0)
如果您使用.NET配置系统,它会为您进行XML解析。见How to: Create Custom Configuration Sections Using ConfigurationSection。即使它在ASP.NET部分,它也适用于所有.NET代码。
答案 11 :(得分:0)
从技术上讲,您不需要解析XML,只需创建数据模型,然后从XML序列化和反序列化。通过使用TreeView或ListView显示数据模型中的每个项目/对象并使用PropertyEditor编辑所选对象的属性,在Visual Studio中为数据模型构建编辑器也非常简单。使用OpenFileDialog和SaveFileDialog让用户选择XML文件和XmlSerializer来加载和保存ur数据模型。真的很无痛我向你保证! : - )
答案 12 :(得分:0)
我在游戏行业工作,我们几乎只使用XML来完成你所描述的内容
原因如下:
1.它很好理解,是一个标准
它在图书馆方面有很好的支持
3.它可以被验证 - 这在创建数据编辑器时是必不可少的
它的结构为
5.它是人类可读的,因此很容易调试
你说你讨厌为了得到一个值而不得不拖网,这个事实告诉我你应该使用其中一个xml解析器。相信我这很容易并且有效
人们使用它是有充分理由的。是的它确实有它的缺点,即冗长等,但相信我的优点远远超出了劣势!