XNA Game Engine系列教程12:设计编辑器
在我讲解游戏编辑器的实现代码前,我想先写一些关于它如何工作的内容。我这样做既是为了保持较短的实际教程(因为实际教程将会非常非常非常长),而且也是为了当编写代码时,帮助您更好地理解我们正在做的事情。
编辑器的使用与Visual Studio类似。素材,引用,组件和代码由Visual Studio编译,然后将重新编译整个项目。如果这种情况发生,编辑器会检测更新并与新的项目同步。这让我们可以使用相同IDE并因此得益,而无需自己编译素材和代码。
在编辑器的主窗体(窗口)是一个可视化面板,这个面板有几个标签,分别是:Project,Scene,Toolbox和Properties。之前我已经实现了这些东西,我将首先谈谈编辑器如何工作。基本上,编辑器“链接”到一个游戏项目,该项目仅仅是一个标准的Visual Studio的.csproj项目文件。这里是TestEnvironment.csproj,我们前面已经在使用它了。现在,我说的“链接”,不是指我们要修改游戏的项目或其他东西。当我们“链接”到项目,我们只是浏览项目,设置项目中的一些目录使编辑器正常工作。
让我们先从以“Project”选项卡开始。此标签包含一个有着三个主要部分的树目录:Scenes,Content和Reference。这些东西就是我们在游戏中用到的全部。从一个文件对话框选择项目可以链接到游戏,我们首先浏览.csproj文件,并解压缩所使用的引用项目。这些引用与你在Visual Studio中修改的引用是一样的。我们加载每一个引用并遍历它包含的每个类型。如果类型从Component继承,我们会标记为含有组件并创建一个包含组件的类型的集合。然后,我们添加目录树中“References”的引用。请注意,我们只能在编辑器中查看引用而不能修改或添加引用,因为这个项目需要进行修改才能增加新的引用。这不好,因为如果项目一直变动,Visual Studio和编辑器将没法同步。
在遍历引用前,任何包含组件的配置将被添加到Toolbox树目录,有组件的节点会包含子节点。现在我们已经有了可用组件的集合,我们可以通过在Toolbox上双击创建一个新的集合。这样会切换到“Scene”标签,它包含另一个树目录。这个树目录有GameScreens及其拥有的组件。这让我们可以可视化场景,也使我们能够从场景中移除组件或改变所处的screen。当从“Scen”标签双击一个组件时,“Properties”选项卡会打开,它有一个PropertyGrid控件(这个控件就是你在Visual Studio的“属性”选项卡中看到的那个)可以设置选中的组件。这样,我们就可以在编辑器中修改组件的属性,而不是通过代码。后面,我们将添加修改器使我们能够改变继承自Component2D和Component3D的组件的属性,如运动,旋转和缩放等,这种修改器你在很多3D建模程序中也能看到。
让我们现在回溯到链接游戏时。在我们找到组件的引用后,我们遍历已经被编译的素材。我们不能在这里添加素材,这必须通过Visual Studio实现,同样道理也不能添加引用,而且因为Visual Studio可以为我们编译素材和引用,自己实现素材编译器是浪费时间。所有素材被添加到项目树目录的“Content”节点中。我们在properties标签中也使用这个,对应property grid有一个自定义下拉菜单,使我们能够选择在bin/x86/Debug/Content目录中的素材,它们的属性是素材类型,如Model,Texture2D等。
最后我们要做的就是遍历在bin/x86/Debug/Scenes目录中的场景。如果此目录不存在,我们会创建它。如果找到场景,我们将其添加到项目树目录的“Scene”节点。双击一个场景我们会打开它并进行编辑。应当指出的是,一个场景是关于引擎状态的XML导出文件,这一步我们是在上一个教程中实现的。为了保存场景,我们只需使用Engine类中的相应方法,加载一个场景的方法类似。没有Visual Studio我们也可以完成这个操作,因为场景文件不会包含在项目文件中,因此它不需要重新编译。
最后一点:我们能够在视界内使用鼠标和键盘移动或旋转相机。按住“S”键和鼠标左键,然后移动鼠标将旋转场景。而按住“S”键和鼠标右键将旋转相机。最后,鼠标中键和“S”键,通过移动鼠标向上和向下我们可以使镜头拉近和推远,移动鼠标向左和向右让相机绕Z轴旋转。如果你曾经使用过XSI的模型工具,会很熟悉这种操作方式。当然,你也可以用不同的操作方式,但因为我大部分时间使用XSI建模,所以我想保持相同的相机控制方式,编辑起来更容易。
这种编辑器的设计对我们来说是有好处的。这意味着我们可以用Visual Studio处理大部分编写代码的工作和项目管理,我们只需关心如何绘制场景并修改,添加和删除场景中的组件。在第一篇编辑器教程中我们不会涵盖所有的内容,并可能第二篇或第三篇教程中也不会。因此,接下来的几个教程将基于编辑器。
最后提示,一些组件需要做一些修改才能在编辑器和串行化引擎中正常工作。我将做出修改并发布新版本,可能需要修改以前教程中的某些内容。
另外,在我离开前,我很想知道你在使用怎样的电脑?我很好奇……我本人正在使用的电脑大约是在一年半以前买的。它有两个8800GT NVIDIA显卡,英特尔Core 2 Duo E6750@2.66主频,4GB的RAM(品牌是什么我记不清了),500GB硬盘(其品牌我也忘记了)。我现在使用Windows 7 Beta版,但我也安装了Vista和XP。请在留言中让我知道你的电脑配置!
发布时间:2009/3/5 上午9:57:49 阅读次数:6902