跳转到内容

使用 XNA 创建游戏/编程/可重用组件

来自 Wikibooks,开放世界中的开放书籍

可重用组件

[编辑 | 编辑源代码]

有很多组件可以轻松地用于其他游戏。例如 3D 雷达抬头显示 [3D 雷达 HUD]。在本节中,我们将展示一些最常见的组件,并特别展示在何处找到大量此类组件的链接。之后,我们将介绍如何使用 XNA Framework 创建自己的游戏组件,这些组件可以在以后重复使用。

游戏状态管理

[编辑 | 编辑源代码]

游戏状态管理示例 代表游戏的菜单系统,并通过切换屏幕对用户输入做出反应。起点是主菜单,其中包含三个条目:播放选项退出

在这个示例中,存在几个 GameScreen 类的实例,它们由 ScreenManager 类管理。GameScreen 是一个抽象类,通过其更新处理输入绘制方法为菜单系统中使用的所有其他屏幕创建基础。表示不同屏幕的其他类扩展了 GameScreen 类。实际的游戏玩法也是一个屏幕,必须设置在 GameplayScreen 类中。

MenuEntry 是一个辅助类,用于创建菜单(MenuScreen 类)的单个条目,该条目在被选中时会发送事件 OnSelectEntry。在这个示例中,菜单条目只是一个字符串,但您可以根据您的游戏设计修改表示形式。MenuScreen 类的对象将包含菜单条目的集合和当前选中条目的索引。

在创建的 Game 类中有一个 ScreenManager 类的实例,并且添加了两个屏幕:第一个用于背景,第二个用于主菜单。

您还可以在下面的链接章节中找到主菜单的其他一些示例,包括用于多人网络游戏的类似解决方案,其中包含用于维护会话和错误处理的菜单。

抬头显示(HUD)

[编辑 | 编辑源代码]

分数、生命、血条...

[编辑 | 编辑源代码]

每个游戏都包含一些元素,帮助玩家跟踪进度。例如,如果你获得了一些奖励,它们将显示在屏幕上。其他示例可能是血条、生命数量和分数计数器。所有这些都是游戏的常见部分,可以使用游戏组件实现。

有一个可重用库 XNA 可重用 UI 组件 提供这些组件。它包含四个类

  • 计数器
  • 计时器
  • 通用组件

要使用这些组件,请下载库,解压缩 .dll 文件并将其作为引用添加到您的项目中。现在您可以创建您需要的类的对象并设置属性值。例如,这些是条位置、分数值等。现在,您可以在 Game 类的绘制方法中添加对实例绘制方法的调用。

该库还提供事件处理:如果达到最小值或最大值,则会发送事件。这些事件可以被覆盖,因此您可以决定如果玩家没有生命或燃料了该怎么办。

该库的详细文档可以在 这里 找到。

3D 雷达

[编辑 | 编辑源代码]

3D 雷达 HUD 是 HUD 的另一个示例,它展示了如何使用 2D 抬头显示将 3D 雷达集成到 3D 游戏中。


创建可重用组件

[编辑 | 编辑源代码]

好的,我们已经了解到,如果您正在编写可能在下一个项目中需要的内容,那么创建游戏组件通常是一个非常好的主意。现在让我们谈谈如何做到这一点。XNA Framework 提供了一些用于此目的的类,使用它们,您将能够创建一个新的游戏组件,您可以在以后重复使用和/或共享。

要做到这一点,请创建一个扩展 Microsoft.Xna.Framework.GameComponentMicrosoft.Xna.Framework.DrawableGameComponent 类的类。在类构造函数中,您必须将对 Game 实例的引用作为参数传递。

如果您将包含处理用户输入的功能的类派生自 GameComponent 类,例如,对按下特定键做出反应。在这种情况下,将有两个方法要覆盖

  • 初始化
  • 更新

如果要将某些内容绘制到屏幕上,则应使用 DrawableGameComponent 类。它扩展了前一个类,并且还有一些其他方法,包括

  • 加载内容
  • 卸载内容
  • 绘制

这里有一些教程,您可能需要查看它们,以了解有关创建游戏组件的更多信息,并找到一些示例

在何处找到更多示例?

[编辑 | 编辑源代码]

下面列出的一些资源包含可以下载并在游戏中使用的完整项目。但是,还有一些教程展示了创建特定组件的过程。

用户界面元素

[编辑 | 编辑源代码]

游戏菜单

[编辑 | 编辑源代码]

抬头显示

[编辑 | 编辑源代码]

玛丽亚(维基登录名:jasna)

华夏公益教科书