第1周·星期日 从OGRE 3D演示框架开始
OGRE 3D演示程序框架
如果使用过OGRE 3D的开发包或者编译过OGRE 3D的源代码,则会发现OGRE 3D图形引擎提供的所有演示程序(在1.6版本及以前)都是基于一个极其简单的游戏框架来展开的。通过这个框架可以简单而快速地创建一个基于OGRE 3D的应用程序,它提供了使用OGRE 3D引擎的必要方法和流程。从这个框架入手,了解游戏开发框架是如何帮助我们从无到有创建一个游戏的。
在创建OGRE 3D程序时,只需要继承演示框架中的类并做少量改动即可。演示框架与实际应用的关系如图2-1所示。
图2-1 演示框架与实际应用的关系
这个简单框架只有两个类以供使用,其中ExampleApplication负责安置并提供OGRE 3D的基本调用,可以认为是程序的系统层;ExampleFrameListener在每一帧由引擎进行更新,即执行相应的逻辑处理(虽然是简单的框架,仍会发现已经分离了逻辑和系统)。
ExampleApplication可做以下工作。
(1)创建并维护Root类型的生命期,该类型是OGRE 3D引擎程序的入口点,作为整个引擎的Façade模式实现(参照附录B),负责维护主要组件的生命周期和调用流程。
(2)创建并维护摄像机(Camera)。
(3)创建并维护场景管理器(SceneManager)。
(4)创建并维护渲染窗口(RenderWindow)及相应视口(Viewport)。
(5)载入游戏所需资源。
(6)设置渲染相关参数。
(7)提供创建场景的方法,用于派生类对场景进行相应的布置。
(8)创建ExampleFrameListener或者派生的类型并注册到引擎中,这个类型继承于FrameListener(帧监听器)。在每一渲染帧更新前后被调用,一般处理游戏逻辑的更新。
(9)调度游戏循环。
以上一些OGRE 3D图形引擎的相关概念可以在附录C中找到。
ExampleFrameListener的主要作用是监听系统输入,并对场景做出控制反应。
(1)处理OIS提供的输入消息(键盘、鼠标和手柄)。
(2)创建一个简单的界面,并在其中记录渲染信息。
(3)提供每个渲染帧前后的调用事件给派生类型使用。
以上两个类型组成OGRE 3D提供的最简单游戏框架,其大部分方法被定义成虚成员函数,可以通过继承来修改并加入相应代码完成不同的程序。然而这个框架“过分”简单,其目的只是为了快速创建并展示OGRE 3D应用程序,所以其中并没有提供扩展的规则和方法。但其可以很好地说明游戏框架要做的工作,让我们了解如何在一个已有的框架基础上来构造完整的游戏。
编译并生成安装《七天打地鼠》工程,相应的方法在光盘的介绍中可以找到。