福建计算机,2007年第8期
游戏引擎开发技术浅析
宋宇、谭浩
(电子科技大学计算机科学与工程学院, 四川 成都 610054)
【摘要】:该游戏引擎的开发技术采用的主要语言是C++,结合DirectX9开发套件,综合运用了软件工程思想、人工智能、计算机图形学等知识。 该引擎的主要工作是进行游戏中的碰撞计算、数字建模、物体成像、玩家角色控制等操作橙光游戏,以及处理音乐、音效等必要的功能。
【关键词】: 游戏引擎; DirectX开发套件; 地图编辑器; 角色扮演
一、简介
电脑游戏作为一种大众娱乐形式,已经越来越被人们所接受。 对于计算机游戏来说,游戏引擎是用于控制游戏功能的主要程序。 游戏引擎和游戏之间的关系就像汽车和汽车引擎之间的关系。 不同型号的汽车可以使用相同的引擎,不同的游戏也可以使用相同的游戏,汽车的外观、材质、颜色可以不同,就像不同的游戏有不同的角色模型和场景一样。 游戏引擎实现诸如接受玩家控制信息的输入、选择适当的声音以及以适当的音量进行播放等功能。 无论是2D游戏还是3D游戏,无论是什么类型的游戏(角色扮演游戏<RPG>、即时战略游戏<RTS>、冒险解谜游戏<AVG>或者动作射击游戏<STG> ),都有类似的控制。 动作代码。 游戏引擎是整个游戏的框架。 框架设计好后,就可以进行关卡设计、动画设计和建模了。
2.需求分析
经过不断的演变android游戏引擎开发,如今的游戏引擎已经发展成为一个由多个子系统组成的复杂系统,几乎涵盖了开发过程中的所有重要环节。 本设计主要涉及以下功能:
(1)光影处理:光影处理用于处理光源对游戏场景中的人、物、场所的影响。
(2)碰撞检测:碰撞检测是物理系统的核心部分,可以检测游戏中每个物体的物理边缘。
(3)物理系统:用于模拟现实生活中物体的物理运动系统的系统。
(4)动画:如果没有动画功能,现在的游戏就会很无聊。
(5)渲染:渲染是引擎最重要的功能之一。 渲染引擎是引擎所有组件中最复杂的。 它的功率直接决定了最终的输出质量。
(6)输入输出:负责播放器与电脑之间的通信,处理来自键盘、鼠标、摇杆等外设的信号甚至网络代码。
三、系统设计
3.1 功能设计
作为一个游戏引擎,它必须可用、稳定、可维护。 其主要功能如下:
(1)图像处理:图像成像、曲线绘制、阴影生成、粒子效果。
(2)输入处理:鼠标键盘数据处理、游戏文件加载、脚本读取。
(3)输出处理:游戏信息输出、玩家信息显示、游戏存档创建、音乐音效输出、图像输出。
(4)游戏逻辑设计:控制游戏剧情的发展、控制角色的移动、控制屏幕的显示。
3.2 结构设计
游戏引擎开发采用三层结构模型:
第一层是整个游戏引擎的基础,包括图像处理系统、输入输出系统、音乐音效系统。
第二层为接口层,设置底层与上层之间的接口。
使用接口技术的优点是,更新底层实现时,只要不修改接口,就不需要修改上层代码,实现了系统的层次结构,提高了系统的可维护性和可复用性。系统。
第三层是游戏工具库,为游戏开发提供一些辅助工具,主要封装了底层实现上的一些操作。 这些工具包括地图编辑器、脚本解析器、角色对话模块、玩家类、NPC 类、物品类以及游戏中使用的其他模块。
3.3 游戏引擎IPO走势图
图1IPO走势图
图2 发动机整体结构图
四、系统实施
4.1 引擎开发基础知识及开发环境配置
4.1.1 引擎开发工具的选择
在该游戏引擎的开发中,我们使用了DirectXSDKKit和VC++6.0编译器。
4.1.2 游戏开发核心知识
游戏开发需要很多方面的知识,包括很多计算机专业和非计算机专业的知识,比如编程语言、数学基础、逻辑思维、文学功底、艺术修养等等。当然,要开发一个游戏引擎,知识最多基础数据结构必不可少,比如栈、队列、树、数组、链表、指针等。
数学建模既是一个数学术语,也是一个计算机游戏术语。 通常游戏中的每一个物体,包括人物、动物、房屋、植物,包括水、光、气体等,都必须建模。
4.2 引擎图像子系统的实现
4.2.1 可以使用图片拼接来编辑地图并组合要绘制的页面
31
福建计算机,2007年第8期
将其分成n个单元格,在每个单元格中粘贴我们需要的对象部分,并在粘贴后设置块的属性。
4.2.2 图像子系统功能分析
要求:实现地图合成、2D 贴图、序列动画、屏幕渲染、屏幕显示、基本图形和图像绘制以及粒子系统。
4.3 发动机输入输出子系统和声音控制子系统
4.3.1 输入输出方式
Windows使用message方法来获取键盘和鼠标消息。 当然,游戏中也使用消息来获取键盘和鼠标消息。 因为在有些游戏中,游戏的输入不仅仅由用户提供操作键盘和鼠标的消息。 当剧情发展时,需要虚拟键盘和鼠标消息来自动化游戏的进展。 有时我们必须处理键盘和鼠标消息。 实现一些效果,例如当鼠标移动到屏幕边缘时滚动地图。 这样就必须实时拦截鼠标键盘消息,然后进行处理。
4.3.2 输入输出子系统的实现过程
这里使用DirectX9的DirectInput库来完成输入消息拦截。 运行游戏的一般过程可以分为擦除、移动、等待、重复等步骤。
确定从哪里获取输入后,下一步就是具体的实施过程。 DirectInput和DirectDraw也是虚拟设备,这意味着无论底层硬件如何实现,只要是标准接口,都可以通过DirectInpu t访问来获取输入。 DirectInput的实现过程是Win32应用程序àDirectX输入àHEL(硬件模拟层)或HAL(硬件抽象层)à硬件驱动设备à设备。 理论上来说,DirectInput可以支持鼠标、键盘、游戏手柄、方向盘、踏板等所有输入设备,但本文只使用键盘和鼠标,所以只获取鼠标和键盘消息。
以下是设置DirectInput的基本过程:
(1)调用DirectInput9Create()创建IDirectInput接口,返回值为IDire ctInput9接口。
(2) 查询设备的GUID。
(3) 调用CreateDevice()传递一个GUID:GUID_SysKey-Board主键盘GUID、GUID_SysMouse主鼠标GUID。
(4) 调用IDirectInputDevice9::SetCooperativeLevel()完成设备协作级别的设置。
(5) 调用SetDataFormat()设置各设备的数据格式。
(6) 使用 IDirectInputDevice9::SetProperty() 设置您想要的任何设备的性能。
(7)调用IDirectInputDevice9::Acquire()获取设备,即与设备关联。
(8) 调用IDirectInputDevice9::GetDeviceState()获取设备数据。 数据的实现有两种方式。 收集android游戏引擎开发,一种是直接模式,一种是间接模式。
4.3.3 声音子系统的实现步骤
为了实现音乐和音效处理,我们使用DirectX中的Direct-Music和DirectSound库,其中Direc tMusic用于控制音乐播放,Direct-Sound用于控制音效。 它是一种基于DLS数据的新型实时音乐编曲和制作。 回访技术。
操作DirectSound:
(1)初始化DirectSound并声明DirectSound对象来调用Direct-SoundCrea。 te() 创建一个 DirectSound() 对象。
(2) 设置协作级别并调用SetCooperativeLevel()函数。 Direct-Sound 共有四个协作级别:正常级别、优先级别、独占级别和 White_Primary 级别。
(3) 建立缓冲区,声明DirectSound缓冲区,并调用CreateSoundBuffer()创建缓冲区对象。
(4) 将声音写入缓冲区,锁定(Lock())、写入、解锁(Unlock())。
(5) 控制声音播放:要播放声音,调用play()函数; 要停止播放声音,请调用 stop() 函数; 要控制音量,请调用 SetVolume() 函数; 要调整频率,请调用 SetFrequency。 cy() 函数; 改变通道平衡,调用SetPan()函数。
4.4 游戏工具库开发
4.4.1 地图编辑器和脚本解析器概述
地图编辑器和脚本解析器是游戏开发中的重要工具。 他们在游戏开发过程中综合利用底层操作来实现更高级的功能。 4.4.2 地图编辑器的作用和功能介绍
地图编辑器,顾名思义,就是用来编辑地图的工具。 其主要功能是创建、编辑和保存游戏场景地图文件。 一般来说,游戏场景图分为三层:地面层、物体层、天空层。 地面层用于粘贴游戏场景的底层图片,比如陆地、沙漠、草原等,可以归属于地面层; 这里的对象层不仅仅是一层,对象层可以分为上层和下层。 上层物体可以遮挡人,下层物体也可以遮挡人,所以在设计时,将人物定位在下层物体上; 天空层用于效果处理。 如果要实现黑暗效果,则必须将其添加到对象图层的顶部。 一张黑色的照片。 创建游戏场景图主要有几个步骤:(1)加载背景图片; (2) 显示背景图片; (3) 在地图上绘制网格; (4) 将某个场景粘贴到某个网格中; (5)设置场景属性; (6)保存地图。
4.4.3 脚本编辑器的作用和功能介绍
为什么我们需要设计一个脚本解析器? 其目的主要是解决插件通用性问题。 我们知道,一些游戏运营商经常会调整或者扩充自己游戏中的一些数据。 如果我们将这些信息硬编码到程序中,那么每次游戏运营商修改数据时,我们都必须重新修改和编译插件,这给插件的推广和使用带来了极大的不便。 另外,脚本解析器也是智能AI处理的一部分,游戏行为的实现很大一部分依赖于脚本代码的编写。 因此,设计脚本解析器和游戏脚本指令系统非常重要,其中脚本指令系统更为重要。
5.测试
游戏引擎开发完成后,由设计师和美工完成游戏的创作。 首先,创建游戏脚本。 剧本确定后,我们要对剧本进行分镜,确定哪些场景中出现哪些角色,与哪些角色进行什么样的对话。 其次,使用地图编辑器创建游戏场景。 地图; 最后编写游戏的脚本文件。 写的时候一定要确定级别和时间地点。 人物对话可以根据故事板后的剧本进行。
6、结论
综上所述,一个通用2DRPG游戏引擎的基本功能已经完成。 该引擎的主要特点是采用模块化设计思想来构建引擎底层程序,因此引擎具有很强的可扩展性和可维护性。 该引擎的工具库具有高度的可重用性,只需进行微小的改动即可适应新格式地图的编辑。 游戏引擎是根据网络游戏引擎来设计的游戏素材下载 免费,因此游戏引擎可以进一步升级为网络游戏引擎,用于网络游戏客户端程序的开发。 如果对引擎底层图形系统进行优化,则可以将引擎升级为2.5D引擎。 由于本文篇幅有限,部分程序代码没有给出。
参考:
1.安德烈·拉莫特。 Windows 游戏编程技巧[M]. 中国电力出版社,2004。
2. 斯蒂芬·普拉塔(美国)。 C++PrimerPlus[M]. 人民邮电出版社,2002。
3. 唐明丽. 学习用VC编写游戏程序[M]. 四川电子音像出版中心,2004。
4.约翰·弗利赛兹。 设计模式[M]. 机械工业出版社,1995。
5. 融勤科技. 游戏设计概论[M]. 北京科海电子出版社,2003。
6. 史蒂芬·C·德沃斯特. C++编程陷阱[M]. 中国青年出版社,2003.7。 大卫·J. 克鲁格林斯基。 Visual C++ 技术内幕。 清华大学出版社,1999。
32