XNA游戏中的自定义关卡文件夹放在哪里?

XNA游戏中的自定义关卡文件夹放在哪里?,xna,storage,Xna,Storage,我完全不知道在我的游戏中*.txt级别的文件存储在哪里以及如何存储 我希望在我的游戏中提供一些“预烘焙”的关卡,这些关卡是随游戏一起安装的,而且用户可以创建自己的关卡 所以我在VisualStudio中创建了一个名为levels的新目录,并在其中放置了一个“level1.txt”。但我访问*.txt级别文件的唯一方法是使用完整路径,我不能将它们包括在visual studio解决方案中,因为它不生成: "C:\My Documents\blahblabh....\levels\level1.t

我完全不知道在我的游戏中*.txt级别的文件存储在哪里以及如何存储

我希望在我的游戏中提供一些“预烘焙”的关卡,这些关卡是随游戏一起安装的,而且用户可以创建自己的关卡

所以我在VisualStudio中创建了一个名为levels的新目录,并在其中放置了一个“level1.txt”。但我访问*.txt级别文件的唯一方法是使用完整路径,我不能将它们包括在visual studio解决方案中,因为它不生成:

 "C:\My Documents\blahblabh....\levels\level1.txt"
  • 我是否将这些“预烘焙”映射放在可执行文件附近的某个目录中?在编译项目之前,如何在/bin目录中创建目录
  • 如何阻止用户删除游戏附带的“预烘焙”关卡?
    (我不再需要此关卡)
  • 此外,我在哪里存储用户自定义创建的级别?我认为这应该通过StorageDevice实现。但这与第一个问题有关,即在部署游戏后如何创建目录
欢迎任何指点!多谢各位

编辑:Re:自定义内容处理器。这似乎比我需要的要复杂得多。但是我也需要将我的游戏部署到xbox360上,那么存储设备能正常工作吗?

您肯定应该在可执行文件中添加“预烘焙”级别。我不使用VS,所以我不能告诉你怎么做

确实没有办法阻止用户删除您的级别,但是您可以使用散列来验证它们是否未被修改(用户仍然可以通过修改您的可执行文件来绕过此问题,但这应该会阻止大多数用户)


您应该将自定义关卡放在用户文件夹中,如
C:\Documents and Settings\user\MyGame\levels\level.txt

您可以编写一个自定义的内容处理器来处理您的级别文件,但这可能有些过头了。这样做的好处是,您可以将级别“编译”为用户更难修改的某种格式

您只需将其添加到项目中(不在内容中),并在属性中指定“复制到输出目录-始终复制”。在项目中创建一个新的子文件夹,并将其放置在那里-这将是它复制到的目录

对于不允许用户删除预烘焙的级别,Windows上无法允许这样做。您可以在代码中执行检查,如果用户要删除某些预期的文件,则会导致代码失败


要创建新目录,可以使用StorageDevice.OpenContainer().Path获取根路径,并使用directory.CreateDirectory。这将在PC和XBox上运行。

编写自定义内容处理器并不难,它强制执行良好的实践,并迫使您编写合理的验证,同时由于更简单的读取格式,在加载时加快游戏速度。这也使得在事后移植到X360变得更加容易。简言之,它需要稍微多做些努力,可能会防止很多bug,并且是公认的方法。:)@jfclavette:对于这项任务来说,这可能有点过头了,但这绝对是一次很好的学习体验-XNA非常关注内容管道,没有更好的方法来解决这个问题。“只要级别在“内容”下发布,你就应该能够使用Game.content.RootDirectory来定位文件并读取它们”。这是行不通的。因为如果我将我的“levels”目录包含在content下,由于某种原因它不会被复制到/bin目录中。请注意,我不能将我的“level1.txt”包含在Content/levels文件夹中,因为它不会编译。