基于DirectX库的游戏引擎的框架和接口设计
2017-04-15秦兴杰王坡董佳驹詹玲超
秦兴杰++王坡++董佳驹++詹玲超
摘要:针对DirectX库只有渲染功能,并且该库作为渲染库并不具有游戏引擎中所需要的各种功能。所以在DirectX库的基础上将其应用程序的编程接口封装到各个游戏引擎渲染组件里,使该引擎更好的发挥DirectX库的渲染功能。因为动画组件和功能组件与DirectX库的关系不大,本文的主要工作在引擎的框架和接口设计上。接口就是编程接口,框架借鉴了unity引擎组件+对象的模式,以此来实现一个功能完善、执行效率高的基于DirectX库的游戏引擎。
关键词:游戏引擎 DirectX库 框架 接口
中图分类号:TP391.3 文献标识码:A 文章编号:1007-9416(2016)12-0182-01
Abstract:The DirectX library only has rendering functions, and the library does not have all the functions needed in the game engine. On the basis of the DirectX library, the application programming interface will be packaged to the various game engine rendering components, so that the engine will play DirectX library rendering function better. Animation component and function component have little relationship with the DirectX library, the main work of this paper is on the frame of the engine and the design of the interface. Interface is the programming interface. Framework draws on the model of the unity engine component + object. So to complete and achieve a game engine based on DirectX with perfect function and high execution efficiency
Key Words:game engine;DirectX library;framework;interface
随着游戏产业的发展,其所依赖的游戏引擎也变的越来越重要。游戏引擎为游戏的开发提供了关键的技术框架。一款優秀的游戏引擎能够极大地提高游戏的开发效率和游戏的健壮性。为此掌握游戏行业的核心技术,降低游戏行业的门槛,加强对于游戏引擎核心技术的研究,学习并开发一个全功能的、简单的游戏引擎就显得非常有必要。本文基于DirectX库的游戏引擎的开发提出了一套系统的框架和接口设计。在研究比较了许多成熟的游戏引擎后,最后借鉴了Unity引擎的组件+对象的框架模式。只有好的框架还远远不够,为了保证游戏引擎内容数据和接口的隐藏性,同时保证游戏引擎的可拓展性,设计了动态连接库式的接口。
1 DirectX开发库介绍
DirectX是微软公司针对Windows操作系统的非实时性而推出的一个开发库,目的是让图形图像、动画、多媒体和游戏程序开发人员在Windows环境下很容易地编制高级程序。DirectX包含许多功能,应用程序可以通过使用DirectX API来访问这些新功能。DirectX包含一组API函数,通过它能访问高性能硬件的高级功能,如三维图形加速芯片和声卡。这些API控制低级功能、支持输入设备和控制着混音及声音输出。
2 框架描述
无论做什么,效率总是很重要的,为此借鉴了Unity引擎组件+对象的框架模式。在该框架模式中一个对象表示该对象在三维空间中的位置,并且确定与别的对象之间的关系,可以是某对象的父或者子对象,如果是A对象的父对象,那么自己在三维空间中变换时,如移动、旋转、缩放等,A对象要跟着自己变换。相反如果是A对象的子对象,自己变换时A对象没有任何变化。A对象变换是,自己将会变换。除此外该对象没有任何具体功能。如果该对象需要实现具体的功能则需要添加对应的功能组件。如该对象需要被显示则可以添加网格渲染组件,如该对象需要具有物理碰撞效果则可以添加物理组件。
该框架模式最大的亮点是脚本模块的实现,上述组件是固定功能,在游戏引擎编写完成后,使用者无法对组件功能进行更改。为了拓展组件功能,让使用者自由编写具体的功能组件,设计实现了脚本模块。为此先设计了一个名叫DreamBehavior的基类,在该类里声明了若干的虚函数,如Update函数,该函数将在每一帧画面被调用一次。然后使用者声明一个新类继承DreamBehavior基类并重写这些函数,最后把这个新类作为组件绑定到对应的对象上,就可以实现用户自定义功能组件,可以实现更多的功能。使用该框架模式,让游戏引擎的使用和开发都变的相对容易,结构相对清晰,十分便于理解。
3 接口设计
为了进一步提高游戏引擎的效率,同时保证游戏引擎内容数据及接口的隐藏性和游戏引擎的可拓展性,一个好的接口设计显得尤为重要。故设计了接口部分,并考虑游戏引擎实现期间接口的封装性、重用性。最后设计了一个灵活的接口,如图1所示。
从图1中可得所有的组件类继承于BaseCom基组件类,基组件类里实现了大量组件需要用到的共同功能和共同数据。同样GameObject类作为对象类的基类、Camera类、Light类等对象都继承该基类,该基类里也有所有对象类共同需要的功能和数据,避免每个对象类都实现相同的功能。同时组件类只有在对象类中被使用才能实现功能。这样的接口设计,清晰简洁,十分方便后期的维护以及功能的增加。
4 结语
游戏引擎的开发是一个巨大的工程,代码成千上万。为完全实现其基本的功能,一开始如果没有清晰的总体框架,那么在开发过程中随着设计的复杂度增加,实现或者更改功能将变得越来越复杂。所以在开始设计实现功能前就需要有一个大概的框架结构。对于接口,根据上述设计将被编译成动态连接库的形式提供给开发者,这样就实现了应用代码与引擎代码的无关性,能让开发者更好的关注游戏的实现,而不需要关心游戏的实现原理。同时也方便设计后期的更新,如果有新的功能,只需要替换动态连接库,只要保持接口的一致性,开发者几乎可以不用修改代码,即可对游戏引擎不同的版本使用。框架的完成接下来就是游戏引擎的实现,这里只是为了突出框架设计在游戏引擎开发过程中的重要性。
参考文献
[1]Jason Gregory.游戏引擎架构[M].北京:电子工业出版社,2014.
[2]Frank D.Luna.DIRECTX 9.0 3D游戏开发编程基础[M].北京:清华大学出版社,2012.
[3]Jim Adams.DirectX高级动画制作[M].重庆:重庆大学出版社,2013.
[4]金守荣.国际游戏场景设计[M].北京:中国青年出版社,2014.
[5]Andre LaMothe.WINDOWS游戏编程大师技巧[M].北京:中国电力出版社,2014.