摘要: 第五章编写自己的XNA图像引擎 5.1本章概览 在本书的第一部分,您学习了XNA Framework,使用SpriteBatch类渲染2D图像,并且做了几个有趣的小游戏。现在,是时候探索更加令人兴奋的3D图像编程世界了。制作3D游戏比拼装一个2D游戏需要更多的工作量,如果没有3D图像技术的飞速发展,很多游戏都是不可能完成的。有些游戏也可以是2D的,例如即时战略游戏,而且大多数... 阅读全文
posted @ 2010-05-11 22:19 AlexCheng 阅读(222) 评论(0) 推荐(0)
摘要: 4.7 本章摘要 现在,您的小规模的游戏引擎拥有了三个新的命名空间,并且拥有很多将来项目中可以使用的辅助类,而其中TextureFont类对接下来的几章将特别有用。它不仅可以用于显示类似记分板这样的游戏数据,还可以用于单元测试。在单元测试中,它可以显示一些帮助性的文字告诉玩家所有可用的热键,尤其当您遇到问题时,还可以显示测试及调试信息。例如,一个camera类的单元测试可以输出came... 阅读全文
posted @ 2010-05-11 22:18 AlexCheng 阅读(160) 评论(0) 推荐(0)
摘要: 4.6 挑战:制作NextBlock游戏组件 本章并没有真正地去讨论NextBlock游戏组件,这样做是有理由的,因为我希望您自己去创建它。在本书的源代码中,NextBlock类是空的,您的任务就是去填充它并使之运行。本游戏中,NextBlock游戏组件已经被添加到了TetrisGrid类中,您也已经看到了所有的方法。如果您在实现自己的方式时有疑问,可以查看我写的XNA Tetris项... 阅读全文
posted @ 2010-05-11 22:14 AlexCheng 阅读(191) 评论(0) 推荐(0)
摘要: 4.5 Tetris,Tetris,Tetris! 关于辅助类和游戏组件已经讨论很多了,现在我们就来编写一个很酷的游戏。正是借助于这些辅助类,在这个新的游戏中,我们才能非常容易地在屏幕上输出文本,绘制sprites,处理用户输入以及播放声音特效。 在深入到Tetris游戏逻辑细节之前,仔细考虑一下游戏元素的布置会很有帮助,就像您在前几章所做的那样。起初我们并不是把所有的游戏... 阅读全文
posted @ 2010-05-11 22:06 AlexCheng 阅读(263) 评论(0) 推荐(0)
摘要: 4.4更多辅助类 上一章我们讨论了很多辅助类的知识,本章并不会特别详细地讲解Tetris游戏中要用到的两个新辅助类,因为它们是本书后面要用到的真正的类的精简版本。但它们还是很有用的,可以让您的游戏开发过程更加容易。 TextureFont类 您已经了解到XNA本身不支持字体,唯一一个显示文本的方式就是使用位图字体(也可能使用自定义的3D字体渲染方式)。在本书的前几个游戏中,... 阅读全文
posted @ 2010-05-11 22:06 AlexCheng 阅读(207) 评论(0) 推荐(0)
摘要: 4.2 Game类 前几章您已经使用过了Game类,但这些章主要讲的是从Program类和单元测试中调用Run方法来启动游戏,以及如何使用Initialize、Update和Draw等方法,并没有讨论基本的设计。当然,如果做的只是一些简单的游戏,掌握这些知识就够了。但随着游戏的规模逐渐变大以及需要更多的游戏特性,您或许就需要好好考虑游戏类的设计了。 Game类中提供了保存图... 阅读全文
posted @ 2010-05-11 21:54 AlexCheng 阅读(211) 评论(0) 推荐(0)
摘要: 4.3游戏组件 TetrisGame类使用继承自基类的Components属性(在Microsoft.Xna.Framework.Game类中)来保存所有的游戏组件,您可以向这个列表中添加任何继承自GameComponent类的自定义组件类,当游戏启动或者更新的时候这个自定义类会被自动调用。但是在绘制游戏的时候它是不被调用的,因为GameComponent类没有Draw方法。不过,... 阅读全文
posted @ 2010-05-11 21:54 AlexCheng 阅读(200) 评论(0) 推荐(0)
摘要: 4.1本章概览 本章主要讨论Game类的基本原理以及游戏组件的相关概念。下一章您将开发自己的图像引擎,但在这之前您还需要几个新的辅助类。其中BaseGame类用来实现更多的特性,而且它会使用到目前所有其他辅助类。该类继承自Game类(Microsoft.Xna.Framework.Game),以便使用所有现有的XNA特性。同样地,主测试类TestGame继承自BaseGame,用来执行... 阅读全文
posted @ 2010-05-11 21:52 AlexCheng 阅读(147) 评论(0) 推荐(0)
摘要: 3.10本章摘要 本章您学习到了大量的类,它们在以后的项目中会非常有用。单元测试也是一个很重要的知识点,以写单元测试开始游戏的开发会是个不错的选择。本章最后介绍了Breakout游戏。本章内容很多,不过幸好您可以跳过一些Breakout游戏的知识点,因为很多部分都可以重用上一章的Pong游戏。 下一章的重点将放在游戏编程上,介绍怎样使用组件来构建游戏。本章中您见识了使用辅助... 阅读全文
posted @ 2010-05-11 21:50 AlexCheng 阅读(165) 评论(0) 推荐(0)
摘要: 3.9挑战:改进Breakout游戏 您可以尝试给玩家设置更多的生命次数,还可以像上一章那样添加一个游戏菜单。您也可以把Breakout游戏作为一个测试平台,来检验目前已经实现的辅助类。例如,玩家每次升级或者打碎了一个砖块的时候,可以写一条日志消息记录下来。 下一章将介绍一个Input类,它可以更加容易地捕获控制器的所有输入。就像上一章一样,可以做一个非常好玩的改进:给Ga... 阅读全文
posted @ 2010-05-11 21:48 AlexCheng 阅读(195) 评论(0) 推荐(0)
摘要: 3.7其他辅助类 Helpers命名空间中还包括其他一些辅助类,大多数都像RandomHelper类一样简单,没有必要把它们都讲一遍,所以请你们自己看一下本章没有讲到的那些辅助类,如果想进一步了解它们可以使用其中的单元测试进行一些测试。 在介绍Breakout游戏之前,先简要地看看这样几个辅助类,它们在下面几章中会被反复地使用:SpriteHelper、EnumHel... 阅读全文
posted @ 2010-05-11 21:43 AlexCheng 阅读(213) 评论(0) 推荐(0)
摘要: 3.8 Breakout游戏 前面介绍了很多辅助类,现在是时候使用它们了。这里我将跳过游戏的构思阶段,Breakout游戏只有单人模式,对手则是砖块,所以可以把它说成是Pong游戏缩略版本。最初Breakout游戏是由Nolan Bushnell和Steve Wozniak发明的,并在1976年由Atari公司发行。在这个早期版本中,它仅仅是个黑白游戏,就像Pong游戏一样。但为了让它... 阅读全文
posted @ 2010-05-11 21:43 AlexCheng 阅读(225) 评论(0) 推荐(0)
摘要: 3.6 StringHelper类 StringHelper类是最大的辅助类之一,估计它是我写的第一个辅助类,因为针对字符串的处理操作非常多,很容易就可以想到一些方法来改善性能,更容易地处理字符串列表,输出字符串数据等等。 看一下StringHelper类的结构图(如图3-9所示),您会发现它的方法非常多,重载的方法支持很多不同类型的参数。它还包含大量的单元测试,... 阅读全文
posted @ 2010-05-11 21:41 AlexCheng 阅读(227) 评论(0) 推荐(0)
摘要: 3.5 RandomHelper类 看一下辅助类中的RandomHelper类,在单一项目中它用得不是很多,但几乎任何一个游戏都会需要产生一些随机数让游戏内容看上去没有太多的周期性,并让游戏富于变化。 在Breakout游戏中,您就需要一些随机数,这里的砖块(block)就是随机生成的。第一级的随机概率是10%,第二级是20%,以此类推,这样游戏级别不断提升,游戏也就变得更... 阅读全文
posted @ 2010-05-11 21:38 AlexCheng 阅读(200) 评论(0) 推荐(0)
摘要: 3.4 XNA 中的单元测试 在进一步学习辅助类之前,本节先来简单地讨论一下单元测试。上一章您已经学习了静态单元测试(static unit test),静态单元测试非常适用于快速检测输出结果、测试物理特性和控制器以及快速构建游戏。但是辅助类和组件不需要用户输入,这就要求您自己来处理它们。这是没有意义的,因为单元测试主要是为了改进应用程序的可维护性,并确保尽可能少地出现错误。例如,... 阅读全文
posted @ 2010-05-11 21:36 AlexCheng 阅读(253) 评论(0) 推荐(0)
摘要: 3.3记录错误信息 调试代码非常复杂,特别是渲染循环出错了,但您却得不到任何异常。只设置几个调试断点并不够,尤其是当游戏运行一段时间之后出现了错误,调试并不是合适的选择。您或许想知道每一帧都发生了什么,但又不想一步步地跟踪它。对于这类问题,您可以给控制台输出一些信息,不过这只能在Visual Studio中使用,而且当下次启动项目时这些信息就没了。 在我做过的比较大型的项目... 阅读全文
posted @ 2010-05-11 21:30 AlexCheng 阅读(185) 评论(0) 推荐(0)
摘要: 3.2管理内容管道 正如您在第一章中学到的,内容管道主要用来导入游戏资源,比如texture、模型、shader和声音文件。和Visual Studio(或XNA Studio)使用的其他文件不同的是,内容文件不仅仅是被添加到项目中就没事了,它们会被处理并编译成二进制内容文件,然后在游戏中加载它们(如图3-1所示)。 图3-1 过去,游戏编程人员必须得自己写内容导入器加载... 阅读全文
posted @ 2010-05-11 21:30 AlexCheng 阅读(247) 评论(0) 推荐(0)
摘要: 第三章 辅助类 3.1本章概览 我通常会把很多有用的小工具和类集中放在一个Helper命名空间中,慢慢地它们会变得非常有用。对于一个单一的项目来说,它们或许并不是最重要或最有使用价值的代码,但因为它们会被反复地使用,所以不管引擎的其它部分是否发生变化,辅助类总是引擎或项目中最稳定的部分。大多数辅助类和游戏编程都没有太大的关系,它们可以用于其它项目,甚至是Web应用。 正... 阅读全文
posted @ 2010-05-11 21:28 AlexCheng 阅读(192) 评论(0) 推荐(0)
摘要: 2.6问题解答 希望本章不会有太多的难题。本章主要接触了两个主要问题:单元测试和Sprites。或许在Xbox 360上运行游戏您还有些问题,我已经在第一章的结尾处写了一些提示和技巧,您可以去看看。 另外一个问题是理解为什么会抛出异常,并且要如何解决它。大多数人都不会有这样的问题,但对于少数不熟悉异常尤其是XNA异常的人来说却是个问题。您要紧盯着异常,查看完整的堆栈跟踪,看看是... 阅读全文
posted @ 2010-05-11 21:25 AlexCheng 阅读(232) 评论(0) 推荐(0)
摘要: 2.4在Xbox 360上试试 好了,游戏已经完成了,而且在Windows平台上也做了很多测试。就像我在第一章中解释的那样,要在Xbox 360上配置并运行XNA Framework需要几个关键步骤。如果Xbox 360上的XNA Game Launcher已经启动,您可以试着编译您的XNA Pong游戏并把它部署到控制台。 对于Xbox 360有特别重要的几点要谨记: ... 阅读全文
posted @ 2010-05-11 21:14 AlexCheng 阅读(204) 评论(0) 推荐(0)