2013-03-04 214 views
1

我大约有20%进入我的第一场比赛,并想知道存储本地数据的最佳方式是什么。我需要以数据库类型的方式存储物品属性,例如等级,每等级的伤害等。将这些数据存储在“本地”数据库中,然后使用SQL进行查询被认为是很好的做法吗?还是有另一种方式?我正在使用.NET 4和XNA 4游戏数据存储

谢谢!

+1

[GameDev上的这个问题](http://gamedev.stackexchange.com/questions/7952/how-to-choose-how-to-store-data)是类似的,也许你会觉得它很有用(唯一的不同之处在于它没有专注于具体的框架) – 2013-03-04 20:47:26

+1

除非您有非常非常特定的性能需求,并且需要通过任意属性查询数据,否则使用嵌入式数据库和SQL或EF是一种很好的通用方法。 (假设XNA会让你得到一个普通的旧文件句柄。) – millimoose 2013-03-04 21:19:50

回答

2

我不认为有一个通用的规则,这是很多事情中的一个,只是取决于你在做什么以及你将如何使用你的数据。

存储数据的方法很多。我通常会看到二进制文件格式在游戏中最常见。但是,如果你想在不使用实际的数据库服务器的情况下使用SQL,那么我建议你查看嵌入的数据库,如SQLite,SQL Server Compact Edition或Firebird(还有其他的)。这些将数据存储在单个文件中,但可以使用SQL查询它们。

+0

但是用户可以编辑嵌入式数据库吗?这是我最大的恐惧。我不介意用户是否通过黑客入侵作弊(毕竟这将是单人游戏),但我不希望它像打开数据库文件一样简单。 – TheGateKeeper 2013-03-05 12:58:25

+1

你可以用密码保护它。过去我已经使用SQL Compact和Firebird完成了这项工作。 – Gigi 2013-03-05 14:28:13

+0

我决定使用SQLLite,我们将看看它是如何发展的。感谢帮助的人! – TheGateKeeper 2013-03-05 14:59:57

3

标准方法实际上是使用内置的XNA支持Title和User文件存储。请参阅this overview了解MSFT XNA存储最佳实践。

+0

虽然是一个很好的提示,但用户存储只能解决数据存储位置的问题,而不是如何管理它。 – millimoose 2013-03-04 21:18:24

1

序列化。如果您想要可读文件,请选择XML/JSON序列化程序。如果您需要性能:protobuf或手动二进制序列化。

+0

序列化对于批量写出来的savegames来说可能更好,这可能不是OP正在尝试做的事情。 (看到他提到的一些统计数据可能需要在整个游戏过程中不断更新。) – millimoose 2013-03-04 21:20:24