3D游戏引擎设计与实现(2)
经过几天萌思苦想,总算又设计3D游戏引擎的架构细节部份。原来说到要用到像COM组件的DLL实现,因此怎么样把游戏公共部份写到一起,变化部份写到一起,这样就能达到源程序重用,也可以简少维护工作。同时又把不同的功能模块尽量分开,把每个模块变成单一的功能,这样就可以复杂性降到最低了。
目前大体分为:加载程序,DLL管理模块,引擎管理模块,UI模块,渲染模块,文件管理模块,游戏逻辑功能模块,游戏AI功能模块。以后想到的模块再添加也是可以的,因为都基于接口的方式实现,每个DLL都有自己的接口。
下面来说明这些模块的作用:
l 加载程序
这个模块主要是实现游戏目录的重定位,或者一些其它的初始化工作。
l DLL管理模块
这个模块主要实现所有DLL加载,创建对象,它就是所有DLL对象工厂,由它来创建所有对象,并且负责删除所有对象。
l 引擎管理模块
这个模块主要把其它各个模块组合在一起,并且进行游戏状态机更新和维护,还有消息处理,窗口维护,输入控制并把当前控制消息传给游戏逻辑模块。
l UI模块
这个模块主要实现窗口的UI配置,比如创建新游戏,参数配置等。
l 渲染模块
这个主要在3D API之上实现更好用的Render功能,当然在这个模块里分成DX7,DX8,DX9等等的DLL,以便实现游戏可以在不同的平台上运行,这里的平台差别主要指显示卡的差别,因为不同的DX显示卡,使用不同的加速功能。有用户有钱就可以买最好的DX9显卡,没有多少钱的也许就是DX8的显卡。但总不能把游戏写成DX8的标准方式,因为买DX9显卡的用户肯定想:我花了那么多钱,还玩这破游戏。
l 文件管理模块
这个主要实现资源的加载和管理,比如基于MDL,或者DX的X文件格式。同时也可以进行游戏截图保存等等功能。
l 游戏逻辑功能模块
这个是不同的游戏产品,肯定不同的,比如基于FPS的游戏和RPG的游戏就不一样的游戏逻辑。因此这里主要进行游戏具体实现的功能,比如人物角色怎么样在地图里行走。
l 游戏AI功能模块
这个功能主要实现AI部份,比如寻路算法,NPC的控制。
目前,又想到这么多了,更多的东西还要更深入地去分析和设计,更加需要实践。