使用XNA在游戏中进行关卡设计?


10

我想知道游戏中的关卡设计。我目前的情况是围绕Tiled展开的-我有许多不同的层,其中包含不同类型的对象(对于不熟悉Tiled的任何人,对象不过是具有分配了任意属性的坐标)。

当前,每次对地图文件进行一些更改时,我都会重新编译游戏,以查看所有位置是否正确。如果检测到地图文件更改,是否可以让我的游戏自动重新加载关卡?XNA甚至允许这样做,还是内容管道的工作方式不允许这种方式的动态内容?任何提示或建议都是绝对欢迎的。

Answers:


8

我假设您的地图文件是通过内容管道处理的,然后在运行时通过Content.Load加载。您有两种选择:

  • 通过IntermediateSerializer.Serialize将地图另存为XML文件。然后,在运行时,您可以使用IntermediateSerializer.Deserialize读取它们以查看更改。
  • 这很困难:在运行时调用MSBuild将文件重新编译为正确的XNB,然后使用ContentManager重新加载它们。此示例可以做到这一点。

在这两者之间,我确定我将能够解决一些问题。谢谢!
克里斯托弗·霍伦斯坦

2

如果您想快速入门,也可以使用Karvonite

这是一个敏捷的持久性框架。我不确定新版本是否可以在Windows Phone 7或xbox上运行。

您将使用其持久性编辑器创建一个持久性定义(这很简单,您只需导入程序集并检查要持久化的类/结构上的字段/属性)即可在代码中启动ObjectSpace并从中添加/删除/获取对象。(这些对象被保留)

如果可以创建一个抽象,以便平铺引擎或您所说的任何东西都不在乎它如何获取地图,而只是在它获取所需的地图即可。然后,您可以返回并使用XmlSerializer或Intermediate。(您喜欢的那个)实现这些其他序列化程序所需要做的就是创建抽象的另一种实现(接口或抽象类)。

我认为XNA Creator俱乐部网站上有一个如何在运行时构建内容的示例。它可能不是使用最新框架构建的。这样,如果您已经使用了内容管道,则可以保留旧代码。这是链接:Winform系列2:内容加载


我问这个问题有点傻,但是您能描述一下使用此框架的工作流程吗?听起来确实很整洁,但是我不确定该如何处理。
克里斯托弗·霍伦斯坦

1
好了,您可以在其持久性编辑器中定义序列化。(这很容易,您只需导入对象程序集,然后在要持久化的结构/类和字段/属性上选中一些框即可)完成此操作后,您只需初始化一个对象空间即可对对象进行序列化/反序列化。起来非常整洁,快速。
Michael Coleman

1
您也可以在Codeplex上查看此项目,以获取有关如何在Visual Studio外部构建内容的更好示例。(xnadevru.codeplex.com/…)–
迈克尔·科尔曼
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.