现在的位置: 首页 > 综合 > 正文

浅析游戏引擎开发

2013年07月19日 ⁄ 综合 ⁄ 共 4808字 ⁄ 字号 评论关闭
 第25 卷第1 期
Vol125  No11
长春师范学院学报(自然科学版)
Journal of Changchun Normal University(Natural Science)
2006 年2 月
Feb12006
浅析游戏引擎开发
翟军昌
(渤海大学公共计算机教研部, 辽宁锦州 121000)
[摘 要] 该引擎的开发技术主要是使用C + + 语言, DirectX811 开发包与软件工程思想, 并综合运用
了计算机图形学, 人工智能等知识。该引擎的主要工作是进行游戏中的数字建模、碰撞运算、物体成
像、玩家角色控制等操作, 以及播放正确的音量和声音输出等必要的功能。
[关键词] DirectX开发包; 地图编辑器; 角色扮演; 游戏引擎
[中图分类号] TP317    [文献标识码] A    [文章编号] 1008 - 178X(2006) 01 - 0055204
[收稿日期] 2005 - 12 - 26
[作者简介] 翟军昌(1978 - ) , 男, 辽宁丹东人, 渤海大学公共计算机教研部教师, 从事计算机教学研究。
1  引言
电脑游戏作为一种娱乐方式越来越为人们所接受。对于电脑游戏来说, 游戏引擎是用于控制游戏功能的
主程序, 如接受玩家控制信息的输入, 选择合适的声音以合适的音量播放等。2D 游戏或者3D 游戏, 不管游
戏是怎样的形式(是角色扮演游戏、即时策略游戏、冒险解谜游戏或是动作射击游戏) 都有类似的起控制作
用的代码。游戏引擎相当于游戏的框架, 框架打好后, 关卡设计师、建模师、动画师可往里填充内容。
2  需求分析
游戏引擎是一个很复杂的系统, 在这个设计中主要涉及到了以下几项功能:
(1) 光影处理: 光影处理是用来处理游戏场景中光源对游戏中的人、地、物所影响变化的效果。
(2) 物理系统: 用于模拟现实生活中的物体物理运动的一个系统。
(3) 碰撞检测: 碰撞检测在游戏引擎中如此重要, 原因是现实生活中随处都有碰撞的发生。
(4) 画影成像: 这是游戏引擎一项必不可少的功能, 否则在游戏中将看不到游戏的图像。
(5) 输入与输出: 提供给玩家与游戏交互的功能, 这也是游戏与电影的区别。
3  系统设计
311  功能设计
作为一个游戏引擎, 它必须是可用的、稳定的、可维护的。它的主要功能有如下几点:
(1) 图像处理: 曲线绘制, 图像成像, 阴影生成, 粒子效果。
(2) 输入处理: 鼠标和键盘数据处理, 游戏文件装载, 脚本读取。
(3) 输出处理: 游戏信息输出, 玩家信息显示, 游戏存档建立, 音乐、音效输出, 图像输出。
(4) 游戏逻辑处理: 控制剧情发展, 控制人物移动, 控制画面显示。
312  结构设计
游戏引擎开发采用的是三层结构模型:
第一层是游戏引擎的基础, 它包括图像处理系统, 输入输出系统和音乐、音效系统。
第二层是接口层, 设定上层与底层的访问接口。
采用接口技术的好处就是更新底层实现的时候, 只要接口不被修改, 那么就不需要改动上层代码, 实现
系统层次化结构提高了系统的可维护性与可重用性。
·55 ·
第三层是游戏工具库, 在这里提供了游戏开发的一些辅助工具, 主要是封装了一些对底层实现的操作。
它包括地图编辑器、脚本解析器、人物对话模块、角色类、NPC 类和物品类等等一些在游戏中用到的模块。
313  游戏引擎的IPO 图
图1  IPO 图
图2  引擎整体结构图
4  系统实现
411  引擎开发基础和开发环境配置
41111  引擎开发工具的选择
在本次开发游戏的引擎开发中, 我们使用DirectXSDK开发包与VC + + 610 编译器。
41112  游戏开发的核心知识
游戏开发需要多方面的知识, 它包括很多非计算机专业和计算机专业方面的知识。开发一个游戏引擎,
最基本的数据结构的知识是必不可少的, 如队列、堆栈、数组、链表、树、递归等等。
数字建模是数学的术语, 也是计算机游戏的术语。一般情况下游戏中的每一个对象, 人物、动物和植物
包括水、气体等非生物都要进行数字建模。
412  引擎图像子系统的实现
41211  采用图片拼接的方式来编辑地图, 将待绘页面分成n 个单元格, 在每个单元格中贴入我们想要的对
象部分, 贴入后设置该图块的属性。
41212  图像子系统的功能分析
需求: 实现2D 贴图、地图合成、序列动画、基本图形图像绘制、屏幕渲染、画面显示、粒子系统。
413  引擎的输入输出子系统与声音控制子系统
·56 ·
41311  输入输出方式
在windows 中获取鼠标和键盘信息是使用消息方式来获取的。在游戏中, 同样也是使用消息方式来获取
键盘和鼠标信息。因为, 游戏的输入不仅由用户来提供操作键盘和鼠标消息, 有时候比如在剧情发展的时
候, 需要虚拟键盘和鼠标消息来自动化游戏的进行; 有时我们要对键盘和鼠标的消息进行处理来实现一些效
果, 比如当鼠标移动到屏幕的边缘时, 我们要滚动地图。这样就必须实现实时的截获鼠标和键盘消息, 然后
处理。
41312  输入输出子系统的实现步骤
在这里使用的是DirectX 的DirectInput 库来完成输入消息截取的。游戏的运行过程大致可以分成擦除、
移动、绘制、等待、重复这几个步骤。
确定了在什么位置获取输入后, 接下来就要看具体的实现过程了。DirectInput 和DirectDraw 一样是虚拟
设备, 也就是说不管底层的硬件是如何实现的, 只要符合标准的接口, 都可以通过DirectInput 来获取输入。
DirectInput 的实现过程是Win32 应用程序→Direct 输入→HEL (硬件仿真层) 或HAL (硬件抽象层) →硬件设
备驱动→设备。理论上DirectInput 可以支持所有的输入设备如鼠标、键盘、游戏摇杆、方向盘、踏板等, 但
在本文中用到的只有键盘和鼠标, 所以只要获取键盘和鼠标消息即可。
下面是设置DirectInput 的基本步骤:
(1) 通过调用DirectInput8Create ( ) 来创建IDirectInput 接口, 返回值是IDirectInput8 接口。
(2) 查询设备的GUID
(3) 调用CreateDevice () 传递一个GUID : GUID SysKeyBoard 主键盘的GUID ; GUID SysMouse 主鼠标的
GUID。
(4) 设置设备的协作等级, 通过调用IDirectInputDevice8 : : SetCooperativeLevel () 来完成。
(5) 调用SetDataFormat () 来设置每一个设备的数据格式。
(6) 使用IDirectInputDevice8 : : SetProperty () 设置你想要的任何设备的性能。
(7) 调用IDirectInputDevice8 : : Acquire () 来获取设备, 即与设备关联。
(8) 调用IDirectInputDevice8 : : GetDeviceState () 来获取设备的数据, 在这里有两种方式实现数据采集方
式, 一是直接模式; 二是缓存模式。
41313  声音子系统实现的步骤
实现音乐和音效处理, 我们用到的是Directx 中的DirectSound 和DirectMusic 库。DirectSound 是控制音效
的, DirectMusic 是控制音乐播放的, 它是一种新的基于DLS 数据的实时音乐编排和回访技术。
操作DirectSound :
(1) 初始化DirectSound , 声明DirectSound 对象, 调用DirectSoundCreate ( ) 创建DirectSound 对象。
(2) 设定协作等级, 调用SetCooperativeLevel () 函数, DirectSound 一共有四个协作等级: 普通级、优先
级、排他级和Write Primary 级。
(3) 建立缓冲, 声明DirectSound 缓冲, 调CreateSoundBuffer () 来创建缓冲对象。
(4) 把声音写入缓冲, 锁定( Lock () ) 、写入、解锁( Unlock () ) 。
(5) 控制声音播放: 播放声音, 调用play () 函数; 停止播放声音, 调用stop () 函数; 控制音量, 调
SetVolume () 函数; 调整频率, 调用SetFrequency () 函数; 改变声道平衡, 调用SetPan () 函数。
414  游戏工具库开发
41411  地图编辑器与脚本解析器的概述
地图编辑器与脚本解析器是游戏开发的重要工具, 它们综合利用底层的操作来实现游戏开发过程中比较
高级的功能。
41412  地图编辑器的作用与功能介绍
地图编辑器主要的功能是创建、编辑和保存游戏场景地图文件。游戏场景地图一般分为三层结构, 地面
层、物体层、天空层。地面层是用来贴入游戏场景的最底层图片的, 如土地, 沙漠, 草地这些都可以归结到
·57 ·
地面层; 物体层在这里不单单是一层, 物体层可分为上层和下层, 上层的物体可以遮挡人物, 下层的物体可
以阻挡人物, 所以在设计中把人物定位在物体的下层; 天空层是用来作效果处理的, 如想实现天黑效果, 你
不得不在物体层的上面加上一张黑色图片。创建一张游戏场景地图主要有以下几个步骤: (1) 装载进入背景
图; (2) 显示背景图; (3) 在图上画出格子; (4) 在某一格子贴入确定的景物; (5) 设置景物属性; (6) 保
存地图
41413  地图编辑器技术实现
41414  脚本解析器技术实现
5  测试
在游戏引擎开发完之后, 游戏的创作就由设计师与美工来完成。首先, 创作游戏剧本, 确定了剧本之
后, 我们就要对剧本进行分镜处理, 确定在什么场景出现什么人物, 和什么样的人物有什么样的对话; 其
次, 使用地图编辑器来制作游戏场景地图; 最后, 编写游戏的脚本文件, 编写时要确定关卡和事件发生地
点, 人物对话就按分镜处理后的剧本就可以了。
6  结论
综上完成了一个通用的2DRPG游戏引擎的基本功能。该引擎的主要特点是采用了模块化设计思想来构
建引擎的底层程序, 因此该引擎具有较强的扩展性和可维护性。该引擎的工具库具有高度的可重用性, 只需
经过少许的改动就可以适应新格式地图的编辑。该游戏引擎是按照网络游戏引擎设计的, 所以游戏引擎可以
进一步的升级为一个网络游戏的引擎, 用于网络游戏客户端程序的开发。如果对引擎的底层图形系统进行优
化, 可以将引擎升级为215D 的引擎。本文限于篇幅部分环节省略, 部分程序代码没有给出。
[参考文献]
[1 ]Andre LaMothe. Tricks of the Windows Game Programming[M] .中国电力出版社,2004.
[2 ]唐明理. 学VC 编游戏[M] . 四川电子音像出版中心,2004.
[3 ]Stephen Prata(美) . C + + Primer Plus[M] . 人民邮电出版社,2002.
[4 ]John Vlissides. DesignPatterns[M] .机械工业出版社,1995.
[5 ]荣钦科技. 游戏设计概论[M] . 北京科海电子出版社,2003.
[6 ]Stephen C. Dewhurst. C + + 程序设计陷阱[M] . 中国青年出版社,2003.
Analyzing the Development of Game Engine
ZHAI Jun - chang
(Public Computer Teaching & Research ,Bohai University ,Jinzhou 121000 ,China)
Abstract :The development technology of this engine mainly uses the C + + language ,the DirectX8. 1 SDK,contains the
thought of software engineering ,and utilizes the knowledge of computer graphics ,artificial intelligence ,and so on. The main
task of this engine is to implement physical modeling ,clash checking ,object imaging ,player controlling ,music playing ,
sound outputting and so on.
Key words :directXSDK;map editor ;role player game ;game Engine
·58 ·

抱歉!评论已关闭.