在XNA中保存级别数据

时间:2010-07-15 15:18:34

标签: c# xna

我在XNA写一个游戏。第一个主要目标是在Windows上完成并运行它,但之后我将购买360套件并更改我需要更改的所有位,以便将其变成360上的工作游戏。

我目前正在编写一个关卡编辑器,我将使用它来创建关卡,但也可以作为用户功能使用。我想知道保存数据的最佳/最常见/最简单的方法是什么?我应该在哪里保存它?

2 个答案:

答案 0 :(得分:3)

级别格式

就您保存数据的格式而言,这取决于您。如果您可以将您的关卡数据表示为平面文本,也许是一系列行和数字,请选择它。许多级别的编辑器使用自定义类/结构或XML来表示级别数据。

准备保存

如果数据是平面文本或XML,那么您的工作很简单,没有任何准备工作要做。如果数据包含在类/结构中,则需要先将数据序列化,然后再将其写入存储。

序列化基本上可以通过将类转换为易于写入存储的格式(反序列化朝另一个方向)来轻松地将数据保存在类中。

序列化通常使用XMLSerializer类完成。举一个简单的例子,您可能希望看到MSN example,它们演示了如何保存/加载保存游戏数据。

注意:有些人不喜欢序列化为XML,因为它会将数据暴露给窥探者,对于关卡编辑器而言,这可能不是问题,甚至可能是理想的。

保存数据

最后一个考虑因素是用于保存数据的方法。在PC上,您可以使用标准.NET库将数据写入任意位置,但360上的情况并非如此。如果您玩了很多360游戏,您就会知道每个游戏都弹出一个对话框询问你要使用哪个存储设备。您将需要使用相同的类和&其他360游戏的方法,即XNA StorageContainer 类。微软有一些很好的例子here可以帮助你。

当您计划将级别编辑器作为用户功能保留时,我建议您使用XNA库(Guide.BeginShowStorageDeviceSelector,StorageContainer)来实现为PC和360保存/加载级别数据。这是只是为了避免为PC和360编写单独的保存/加载代码。

答案 1 :(得分:2)

我建议使用Microsoft.Xna.Framework.Storage Namespace。主要的好处是,当移植到xbox360时,这个方向可以正常工作,而保存信息的逻辑几乎没有变化。