微软Game类中三个最重要的方法(见图1-3)


微软Game类中三个最重要的方法(见图1-3)

图 1-3

所有这些 dll 文件都是用 C# 编写的,并且是完全托管的 dll。这意味着您可以使用 Reflection 之类的工具(可从 获得)打开这些 dll,并直接查看它们是如何工作的(参见图 1-4)。大多数内部函数都类似于 DirectX dll,并且同样简单。内容管道很难描述。

direct 3d和xna游戏开发基础_xna 游戏开发_direct3d和xna游戏开发基础

图 1-4

看一下应用模型。

每个 XNA 项目都使用一个 Game 类,其中包含所有重要的游戏组件、图形设备、窗口设置和内容管理器。在这里您还可以添加输入和声音处理。基本上,您游戏中的所有内容都是基于 Game 类的高级类,或者至少某些组件来自 Game 类。下面是 Game 类中最重要的三个方法(见图 1-5) 。

对于上一个版本,Microsoft 在默认情况下将 LoadGraphicsContent 和 UnloadGraphicsContent 辅助方法添加到 Game1.cs 类中,该类在您创建新的 XNA 项目时自动创建。但是这些方法不会在本书中使用,因为将所有初始化和加载的代码放在 Initialize 方法中要简单得多。

图 1-5

xna 游戏开发_direct 3d和xna游戏开发基础_direct3d和xna游戏开发基础

您可能已经猜到所有这些方法的作用。

Initialize 加载你所有的游戏内容,设置你所有的启动设置,并初始化你需要的一切。如果您想遵循 Microsoft 提供给 XNA 的设计风格,您可以使用 LoadGraphicsContent 方法加载所有内容。在绘制每一帧之前,将调用 Update 方法,它会更新您的游戏时间、输入、声音以及屏幕上不可见的所有其他内容。即使您的游戏受 GPU 限制,调用比 Draw 更频繁的 Update 方法也可以正常执行。但是你的更新代码应该与你的绘图代码分开运行,并且本书中没有示例需要特别注意调用 Update 和 Draw 的次数。最后,每帧都会调用 Draw 来绘制屏幕上的所有内容。更新和绘制的分离可能并不总是很重要,如果最终游戏在确定游戏逻辑独立于绘图代码运行时不是很重要,并且几乎总是被单元测试忽略。例如,在 Windows 平台上,用户可能会按下“Alt + Tab”或最小化游戏,此时不需要再次调用 Draw,但可能希望游戏继续在后台运行。这对于在线游戏来说尤其重要,以确保玩家仍然保持同步。此外,您可以将 GameComponent 类添加到您的游戏类中,该类同样具有 Update 和 Draw 方法。这两个方法都是从游戏的 Update 和 Draw 方法中自动调用的。初始化可以直接在构造函数中进行。最初,微软希望开发人员使用 Visual Studio 设计器来创建和添加游戏组件,

direct3d和xna游戏开发基础_xna 游戏开发_direct 3d和xna游戏开发基础

游戏组件化的想法是重用你的部分代码xna 游戏开发,让它们很容易嵌入到你的游戏中。例如,作为 3D 背景的地图渲染器的帧计数器或天空盒。在我看来,有两个主要缺点: XNA 没有提供标准的游戏组件;而且自己编写这样一个应用模型,甚至扩展它的代码也不是什么难事。在本书中,我不会使用很多 GameComponent 类,但你可以自由地将它们插入你的代码中。阅读第 4 章有关 GameComponent 类的更多详细信息,并了解它的优缺点。由于游戏类具有 Components 属性,因此添加更多组件非常容易。

别说我错了,游戏组件的基本思路确实不错;当第一个 XNA 测试版发布时,微软的 Mitch Walker 做了一个关于游戏组件以及如何组合它们的网络直播 XNA 框架的程序管理器。首先,我不是很确定内容管道和游戏组件的思考,要考虑什么。这个网络广播看起来很酷,但是当我开始编写我的第一个 XNA 游戏项目时,我并没有在当前的第一个测试版中找到一个非常有用的设计师。在第二个测试版和最终版本中,大部分初始化游戏组件的代码都被删除了,XNA Game Studio 也有一个图形设计器组件。出现这种情况是因为微软找不到实现设计器的方法,并且游戏组件化的思路在XBox360主机上是行不通的(之前只能在Windows平台上运行)。只是确认一下我的第一感觉,游戏组件化的想法并不是很有用,甚至可能会限制你的一些考虑,比如不得不考虑自己绘制图形(详见第四章)。

情况类似,每款游戏都实现了自己的UI和菜单逻辑,颇有争议。但如果你仔细想想,这就像 Windows 为每个应用程序使用一些标准菜单是多么烦人,而为每个游戏看到一个新菜单是多么美好。如果您想创建一个新游戏并且只需重用代码(例如 SkyCubeMapping 类),您还可以轻松获取代码并创建自己的游戏组件。某些游戏组件,例如相机、屏幕截图捕获器,这些类是可以在许多其他游戏中重用的组件的很好示例,但本书中的几乎所有其他内容都不是使用游戏组件化来实现的。看到在每个游戏中创建菜单的新方法总是一种很好的体验。如果你想创建一个新游戏游戏素材下载 免费,您仍然可以非常轻松地获取代码并创建自己的游戏组件,然后您可以重用代码。(例如,SkyCubeMapping 类)一些游戏组件,如第 4 章中的相机和屏幕截图类是可以在许多其他游戏中重用的组件的很好示例,但几乎在本书的游戏中音效,其他所有内容都是在不使用游戏的情况下实现的成分。

在应用模型方面xna 游戏开发,微软的愿望之一是让游戏开发者社区能够轻松地创建和共享他们的游戏组件,并完善 XNA 社区。您可以搜索 eXperience 项目以获取有关 .