目前,我们已经介绍了许多技术基础,相信您已经对如何将内容显示到屏幕上的相关函数有了较好的掌握。现在是将学到的这些知识组织起来的时候了。
其实,现在直接开发一个游戏也并非难事,但我们并不急着这么做,而是采用一个更加有计划的方法。
在本章中,我们将开始创建一个游戏引擎,这是一个能够承载我们的游戏的框架。在开发每一个游戏时,它都能将代码简化,加快开发速度,使我们能将重点放到游戏本身而不是纠缠于那些无聊的技术细节上。我们可以在引擎中将这些问题一次性解决,那么在开发时就不必心有疑虑。
这个游戏引擎能够为我们解决很多其他复杂的问题:设备功能的兼容性、图形优化、对象管理以及与操作系统之间的交互等。
本书后面的各个章节还会对它继续进行开发和使用。一旦完成引擎开发,将创建一个能复用的DLL类库,您可以将它用于自己的游戏,来获得思路和灵感;或者根据自己的需要进行自定义。
注意:
我们将一直对该游戏引擎进行开发,直到本书结束。如果您想先创建自己的游戏项目,那么应当使用最终版本的游戏引擎代码,但其中可能会包含一些我们现在没有讲到的功能。最终版本的游戏引擎位于本书配套源代码的GameEngine目录中,为了不造成混乱,开发过程中所生成的每个版本在其项目及DLL名称中都包含其所在章节的名称。
4.1 设计游戏引擎
在设计引擎时,我们将利用.NET的面向对象特性。引擎本身会提供一个抽象类,该类支持一套能通用于任何游戏的核心函数集。然后在从该引擎继承出另一个游戏引擎类,并且将该继承类设置为支持使用GDI创建游戏。然后在本书的第10章中,我们将派生出另外一个类用于OpenGL ES游戏,这样允许我们在讨论和开发过程中将功能和方法进行清晰的划分。
除了引擎类,我们还将定义另一个抽象类,该类提供对游戏对象的支持。这些对象用于游戏中所有需要进行渲染的元素(例如,在俄罗斯方块中下落的方块;Pac Man游戏中的妖怪、豆子和小精灵;太空侵略者中所有的飞船和子弹)。对象可以知道与游戏元素相关的各种信息(如,它们在屏幕中的位置),并且允许我们使用统一而简单的方法来有效地处理移动和渲染。与引擎一样,该类也会有一个继承类,用于支持GDI对象。
图4-1展示了这几个类以及它们之间的关系。