我的问题是我是否应该使用文本文件保存游戏数据。我对此有一些基本的担忧:
实际上,没有任何方法可以保护数据,因此,如果用户触摸数据,可能会搞砸一切,而我不希望这种情况发生。
这可能不是存储数据的最有效方法(将会有很多)
我知道如何有效地解析/写入文本文件,因此对于原型制作来说,它们很棒。我只想着眼于未来,我应该考虑切换到什么地方,这样它就不会在开发快要结束时打我。
如果我不应该使用文本文件,应该使用什么?我需要兼容C ++的东西。
我的问题是我是否应该使用文本文件保存游戏数据。我对此有一些基本的担忧:
实际上,没有任何方法可以保护数据,因此,如果用户触摸数据,可能会搞砸一切,而我不希望这种情况发生。
这可能不是存储数据的最有效方法(将会有很多)
我知道如何有效地解析/写入文本文件,因此对于原型制作来说,它们很棒。我只想着眼于未来,我应该考虑切换到什么地方,这样它就不会在开发快要结束时打我。
如果我不应该使用文本文件,应该使用什么?我需要兼容C ++的东西。
Answers:
现在,由于您才刚刚开始,因此文本文件可能还可以。我将解决您的问题中的几个问题。
保护数据并不像您想象的那么重要。如果您的游戏是多人游戏,那么无论如何,您都将数据保存在服务器端。如果您的游戏是单人游戏,那么如果玩家修改数据该怎么办?如果它们损坏了某些东西,那实际上是他们的错,可以重新安装。
绩效也是我们经常无法正确计划的其他方面。在真正衡量性能问题之前,您不应该真正进行优化。我的猜测是,您可能会拥有不那么大的数据量,并且文本文件就可以了。
话虽这么说,您最好的选择是尽可能地抽象数据保存和加载例程。例如,您可以有一个基类,例如DataWriter
,然后提供其不同方法的不同实现。一个非常基本的示例如下所示:
class DataWriter {
virtual void save(GameState state) = 0;
virtual ~DataWriter() { }
};
class TextFileDataWriter : public DataWriter {
virtual void save(GameState state) {
//write to text file
}
};
class DatabaseDataWriter : public DataWriter {
virtual void save(GameState state) {
//write to database
}
};
当您最终分析游戏并意识到文件编写例程中存在性能瓶颈时,您可以提供该类的另一种实现(例如,改为写入数据库),而对调用代码的更改最少。
例如,“游戏数据”一词可能有很多含义
对于每个类别,您可以采用另一种方法。
例如,您可以将SQLite用于本地化,将二进制用于地图,纹理,声音等。
对于配置,您应该使用易于更改的xml文件。
与往常一样,正确的答案是“取决于”。
存在许多具有c ++绑定的xml解析器,并且也存在用于SQLite的c ++绑定。