(计算机应用技术专业论文)基于rpg游戏引擎的游戏开发平台的实现.pdf_第1页
(计算机应用技术专业论文)基于rpg游戏引擎的游戏开发平台的实现.pdf_第2页
(计算机应用技术专业论文)基于rpg游戏引擎的游戏开发平台的实现.pdf_第3页
(计算机应用技术专业论文)基于rpg游戏引擎的游戏开发平台的实现.pdf_第4页
(计算机应用技术专业论文)基于rpg游戏引擎的游戏开发平台的实现.pdf_第5页
已阅读5页,还剩60页未读 继续免费阅读

(计算机应用技术专业论文)基于rpg游戏引擎的游戏开发平台的实现.pdf.pdf 免费下载

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

摘要 摘要 游戏引擎是一个用来处理游戏底层技术的平台,使用游戏引擎,游戏开发 人员可以不用花过多精力去处理系统架构、内存管理、图像绘制等一些底层的 技术。专业的游戏开发人员可以直接使用引擎提供的a p i 来进行游戏开发,但 是,对于非专业的人员来说,开发一个适合自己目标的游戏则非常困难。本课 题就是为了开发一套适合任何人开发游戏的平台而提出的。 本课题首先详细分析了开源游戏引擎g t o e ( g o l d e ntg a m ee n g i n e ) 的工作 原理,在g t g e 引擎的基础上进行了二次开发,改善了g t g e 引擎中的游戏场 景管理、角色模块,增加了人工智能、数据库存储、打斗,交谈、提问和保存 游戏的功能,形成了一个功能完善的r p g ( r o l ep l a yg a m e ) 游戏引擎。与此同时, 本课题还进行了地图编辑器的设计与实现。在引擎和地图编辑器不断完善的基 础上,开发出了一套通用的,灵活的游戏生成平台。 关键词:游戏引擎:g t g e ;游戏生成平台 东北电力大学硕十学位论文 a b s t r a c t g a m ee n g i n ei sp l a t f o r mt e c h n i q u ei ng a m ed e s i g n w i t ht h eg a m ee n g i n e , g a m ed e v e l o p e r sd on o ts p e n dm u c hm o r et i m eo ns y s t e ma r c h i t e c t u r e 、m e m o r y a l l o c a t i o n 、i m a g er e n d e r i n ga n d s oo n p r o f e s s i o n a lg a m ed e v e l o p e rc a l ld e v e l o pt h e g a m eb ya c c e s s i n gt h ea p p l i c a t i o np r o g r a m m i n gi n t e r f a c eo f f e r e db yt h eg a m e e n g i n e ,b u td e v e l o p i n gas u i t a b l eg a m ei sv e r y d i f f i c u l tf o rt h el a y p e o p l e s o d e v e l o p i n ga u n i v e r s a lg a m em a k e ra d a p t a b l et ol a y p e o p l ei so u rp u r p o s e a tf i r s t ,w ea n a l y z et h et h e o r yo ft h eo p e ns o u r c eg m n ee n g i n eg t g e ( g o l d e nt g a m ee n g i n e ) i nd e t a i la n dd e v e l o p eo t h e rf u n c t i o n sb a s e do ni tb yp e r f e c t i n gt h e w o r l dm a n a g e r 、t h es p r i t em o d u l e ,a d d i n gt h en e wf u n c t i o n ss u c h 雒t h ea r t i f i c i a l i n t e l l i g e n c e ,d a t a b a s es t o r a g e ,f i # t s ,c o n v e r s a t i o n ,q u i za n ds t o r a g eo fg a m e s t a t e s m e a n w h i l e ,w ed e s i g na n di m p l e m e n tt h em a pe d i t o r i nt h ee n d ,w ed e v e l o pa u n i v e r s a la n df l e x i b l eg a m em a k e rb a s e do nt h ep e r f e c t e dg a m ee n g i n ea n dm a p e d i t o r k e yw o r d s g a m ee n g i n e ;g t g e ;g a m em a k e r i i 论文原创性声明 本人声明,所呈交的学位论文系在导师指导下本人独立完成的研究成果。 文中依法引用他人的成果,均已做出明确标注或得到许可。论文内容未包含法 律意义上已属于他人的任何形式的研究成果,也不包含本人已用于其他学位申 请的论文或成果。 本人如违反上述声明,愿意承担以下责任和后果: 1 交回学校授予的学位证书; 2 学校可在相关媒体上对作者本人的行为进行通报; 3 本人按照学校规定的方式,对因不当取得学位给学校造成的名誉损害, 进行公开道歉; 4 本人负责因论文成果不实产生的法律纠纷。 论文作者签名:玉蕉! 翌a 一日期:丝! 呈年三月j 乏日 论文知识产权权属声明 本人在导师指导下所完成的论文及相关的职务作品,知识产权归属东北电 力大学。学校享有以任何方式发表、复制、公开阅览、借阅以及申请专利等权 利。本人离校后发表或使用学位论文或与该论文直接相关的学术论文或成果时, 署名单位仍然为东北电力大学。 论文作者签名: 导师签名: 日期:坦圣年三月j 芝e t 日期:捌年上月兰 日 第1 章绪论 第1 章绪论 1 1 课题的研究背景 自d o o m 游戏时代以来,游戏发展很快。d o o m 不只是一款伟大的游戏, 它同时也开创了一种新的游戏编程模式:“游戏引擎 。这种模块化、可伸缩和 扩展的设计观念可以让游戏玩家和程序设计者深入到游戏核心,添加新的模型、 场景和声音创造新的游戏。大量的新游戏根据已经存在的游戏引擎开发出来, 比如c o u n t c r s t r i k e 、t c m af o r t r e s s 、t a c o p s 、s t r i k ef o r c e 和q u a k es o c c e r 都是 基于游戏引擎的概念开发的,其中t a c o p s 和s t r i k ef o r c e 这两款游戏都使用了 u n r e a lt o u r n a m e n t 引擎开发的,c o u n t e r s t r i k e 和q u a k es o c c e r 都是基于i dq u a k e 引擎开发的。事实上,“游戏引擎己经成为电脑游戏界交流的标准用语【l l 。 游戏的引擎可比作赛车的引擎,引擎是赛车的心脏,决定着赛车的性能和 稳定性,赛车的速度、操纵感这些直接与车手相关的指标都是建立在引擎的基 础上的【2 1 。游戏也是如此,玩家所体验到的剧情、关卡、美工、音乐、操作等 内容都是由游戏的引擎直接控制的,它扮演着中场发动机的角色,把游戏中的 所有元素捆绑在一起,在后台指挥它们同时、有序地工作。简单地说,引擎就 是“用于控制所有游戏功能的主程序,从图形渲染、碰撞检测,到接受玩家的 输入,以及按照正确的音量输出声音等等 。其次,我们从软件体系的方面来解 释引擎。从结构上讲,游戏的软件体系结构是一个金字塔型的,最高层就是你 所做成功的游戏,第二层是游戏的引擎,第三层是游戏引擎开发所用到得a p i , 第四层也是最底层,就是用来编写a p i 的高级语言f l 】。完整的体系结构如图1 1 。 可见,引擎并不是什么玄乎的东西,无论是2 d 游戏还是3 d 游戏,无论是 角色扮演游戏、即时策略游戏、冒险解谜游戏或是动作射击游戏,哪怕是一个 只有l 兆的小游戏,都有这样一段起控制作用的代码。经过不断的进化,如今 的游戏引擎己经发展为一套由多个子系统共同构成的复杂系统,从图形渲染、 物理系统、到文件管理、网络特性,还有专业的编辑工具和插件,几乎涵盖了 开发过程中的所有重要环节。 东北电力大学硕士学位论文 图1 - 1 游戏体系结构图 纵观游戏生产的整个过程,目前几乎所有的游戏都是由专业的游戏开发人 员通过调用游戏引擎所提供的a p i 二次开发完成的。为了简化最终游戏生产过 程的复杂性,已经有一些游戏企业开始研发基于游戏引擎基础上的游戏生成工 具,现在比较著名的游戏生成工具有r p gm a k e r 。r p gm a k e r 是一款可让玩家 自行制作角色扮演游戏的软件。制作完成的游戏在没有安装r p gm a k e r 的电脑 上也能运行。该程序还加上了“r u b y 脚本系统 ,使得游戏制作的自由度大大 提升。其主要有以下几个特点: 1 用r p gm a k e r 制作游戏容易上手r p gm a k e r 是一款即使没有程序设计 方面的相关知识,也能独自制作出优秀r p g 游戏的软件。只要具有操作计算机 一般软件的能力,都可以迅速的掌握制作r p g 游戏的技能。对于大多数具有基 本计算机操作技能的普通程序员而言,r p om a k e r 为他们提供了一个快速开发 游戏的平台 2 使游戏个性化在制作过程中,我们可以针对游戏里的每个角色,包括 主人公、伙伴、敌人等,设定生命值、魔法值、职业、技能、特殊技能习得条 件、绝招、必杀率、状态、升级能力值成长曲线、经验值成长曲线等,角色的 发型、五官、肤色、服装、装备、饰品等也任你挑选搭配。有了这些设定,可 以塑造出拥有鲜明个性的故事人物,使游戏具有更鲜明的个性。 2 第1 章绪论 3 使游戏具有曲折的故事情节r p gm a k e r 提供了功能强大且操作简单的 “事件编辑器,让玩家将天马行空的想象力彻底落实为游戏中丰富多彩的事件 与剧情。从基本的逛街、买卖、交谈,到接受古堡里国王指派的任务或下达的 命令等,“事件编辑器”提供了上百种关键设定项目,可以让你非常轻松地利用 这些关键项目之间的排列组合,铺陈出事件丰富_ r 居t j 情多样化的游戏【3 j 。 1 2 课题的研究意义 游戏是一种教育方式。大量游戏玩家在享受游戏的同时,也不自觉地接受 了其中的世界观与价值观,因此,游戏实际上是一种文化的推广。游戏的关键 在于游戏通用引擎。游戏引擎包括了一套完整的游戏开发工具与运行基础,包 含了开发一套游戏所需的最核心的技术。它通过封装技术难点,为游戏软件提 供开发包和系列工具,使得“复制”游戏成为可能。这样可以极大缩短游戏产 品开发周期,降低游戏开发的技术难度。目前,由于国内游戏技术发展的局限, 许多优秀的游戏开发者正在退出游戏开发市场,转而进入引擎授权市场。因此, 如果我们不尽快开发出我国自己的强大游戏通用引擎,那么我们将受到国外前 所未有的文化侵略,因此,我们有必要开发自主知识产权的游戏引擎,推广思 想先进、内容健康的游戏项目,这也是我们的责任。本课题就是在这种背景下 提出来,以电力系统安全培训规程为目标,开发一套具有自主知识产权的通用 游戏引擎。游戏的开发人员在使用本引擎开发具体游戏时,只需要把相关的模 块进行重新的组合以及进行少量的脚本编写即可完成。 1 3 本文的主要工作和主要结构 本文分析了游戏引擎的基本架构,并且在完善和增加开源图形引擎g t g e 功能的基础上,开发了一个基于数据库的模块化游戏引擎,最后在游戏引擎的 基础上开发了一套使用简单、灵活的游戏生成平台。 第1 章:主要叙述了课题的背景及意义。 第2 章:主要讲述了游戏引擎的基本概念、发展概况、游戏引擎的总体架 构、开源引擎g t g e 的优缺点。 东北电力大学硕士学位论文 第3 章:主要讲述了本引擎的体系结构,在对g t g e 引擎分析的基础上, 改进了场景管理、角色管理功能,增加了人工智能和导航功能, 数据库支持、打斗系统、交谈系统、游戏保存,是本文的重点。 第4 章:讲述了与本引擎配套的游戏地图的设计与实现,主要包括:t i l e 结 构的设计、地图的存取。是本文的重点。 第5 章:讲述了在引擎和游戏地图编辑器的基础上开发的游戏生成平台的 设计与实现。是本文的重点。 第6 章:对本文内容作出总结,并讨论引擎未完成的部分,提出了未来的 工作方向。 4 第2 章游戏引擎相关内容综述 第2 章游戏引擎相关内容综述 2 1 游戏引擎的概念及发展概况 简单地说,游戏引擎就是“用于控制所有游戏功能的主程序”,从计算碰撞、 物理系统和物体的相对位置,到接受玩家的输入,以及声音的输出等等功能都 是游戏引擎需要负责的事情。它扮演着中场发动机的角色,把游戏中的所有元 素捆绑在一起,在后台指挥它们有序地工作。因此,无论是2 d 游戏还是3 d 游 戏,无论是角色扮演游戏、即时策略游戏、冒险解谜游戏或是动作射击游戏, 哪怕是一个只有l 兆的小游戏,都有这样一段起控制作用的代码。经过不断的 进化,如今的游戏引擎已经发展为由多个子系统共同构成的复杂系统,从建模、 动画到光影、粒子特效,从物理系统、碰撞检测到文件管理、网络特性,还有 专业的编辑工具和插件,几乎涵盖了开发过程中的所有重要环节。所以,游戏 引擎相当于游戏的框架。框架搭好后,关卡设计师、建模师、动画师只要往里 填充内容就可以了。但因为游戏引擎的开发相当耗时耗财,所以基于节约成本、 缩短周期和降低风险这三方面的考虑,越来越多的开发者倾向于使用第三方的 现成引擎制作自己的游戏。于是,一个庞大的引擎授权市场形成了; 国产游戏产品研发一直比较落后,而游戏引擎的研发前期投入高、风险大 则更加无人问津。所以相比国外十数年的游戏引擎发展历史,国内的引擎发展 可以说尚处于幼年阶段。 由现网易技术研发经理云风( 吴云洋) 于2 0 0 0 左右发布的“风魂”引擎算是 最早走红的游戏引擎之一了,国内有很多2 d 游戏使用这个引擎,这里就包括大 名鼎鼎的大话西游系列及梦幻西游。但其实“风魂也不算是个游戏引 擎,准确地说是个2 d 图形引擎,它并没有物理、砧及方便的编辑工具。 同一时期引擎的还有可乐吧的f a n c y b o x 。f a n c y b o x 是一个基于浏览器技术 的游戏开发平台,它解决了如何在浏览器中无缝运行程序,比如联网、脚本语 言、下载的自动管理等技术,以及如何去解释游戏这种复杂应用的思想。第一 款用f a n c y b o x 开发的游戏是可乐吧的“打雪仗”,并获得了初步成功。此后, 可乐吧开始开发大型网络游戏“奇域 。于是,f a n c y b o x 平台开始基于简化网 东北电力大学硕十学位论文 络游戏的编写代码、维护、运营的全部过程为出发点,并逐步完善;同时对网 络游戏中的图形图像技术、网络技术、客户端服务器技术等底层全部封装,形 成标准化设计。 风魂和f a n c y b o x 都不能算是3 d 游戏引擎。真正的国产3 d 游戏引擎的起 步要推涂鸦软件公司发布的起点引擎( o r i g i ne n g i n e ) 。“起点引擎,意如其名, 这款引擎希望成为中国本土化引擎的一个起点。起点引擎不论是在画面效果还 是在渲染性能上,都有出色的表现,己初步具备了同国外游戏引擎相抗衡的实 力。在内容创建工具上,起点引擎也提供了强大的集成式编辑工具一一起点编辑 器,能满足各种类型游戏的内容创建工作。 虽然国内的游戏引擎有了一定的发展,但相对于国外来说,差距还是非常 大! 尤其体现在对先进技术的运用上以及市场推广上。由于中国游戏引擎开发 的落后现状,所以,不少计划进入自主游戏研发领域的中国公司纷纷做出了从 国外购买游戏引擎的决策,这其中不乏u n r e a l 等价格昂贵的知名大作。然而, 购买国外引擎的硬伤同时也令本土厂家痛苦不堪。第一:成本昂贵,价格是大 多数中小型游戏开发商无法承受之重;第二:国外厂商对国内市场重视程度不 够,很难保证良好的售后服务;第三:人员的沟通不便,出现技术问题不能得 到及时的解决。种种现象表明国内游戏引擎的发展之路还任重而道远。 2 2 游戏引擎的组成 游戏引擎是一项巨大的软件工程。它由许多模块共同组成。比如:渲染器、 特效、g u i 、动画系统、音效、物理、i o 系统( 输入输出) 、舢和网络支持。如 果希望开发一款有着国外一流引擎品质的引擎,则还需要支持顶点着色器和象 素着色器、细节层次模型( l o d ) 、大规模地形绘制等等特征。 此外,引擎还需要提供一些工具以方便程序员开发游戏。比如场景编辑器、 材质编辑器、特效编辑器、模型动画导出插件、动画调试器等。如今,评判一 款游戏引擎质量高低的标准中,工具占的比重已经越来越大了。因为引擎的初 衷就是方便开发人员,所以如果引擎制作人员希望开发人员在更短的时间内完 成品质更好的游戏,就需要花费比引擎内核更多的时间去编写工具。因此,现 第2 章游戏引擎相关内容综述 代的游戏引擎总体上可分为两层结构,即引擎内核与基于内核的各个功能模块。 一般游戏引擎的框架结构如下图2 1 所示: “。“ ;i 。一i 。i 。“:j 。j ? 音效系统人工智能与导航脚本系统 ,7 物理系统 模型与动画系统渲染系统 1 0 支持系统定时系统内存管理系统 8 8 粉,7 :“一j ,| , 控 , :一 , 。, 一 。 ; 。 制、 接瞄 。游戏逻辑控制框架 主 : 口 程 毫。i 皖。? j i j f 二铲旋一二j ,z ,_ j 、ji ,一ji ? ;:缸蠢乞磊? ? , 序二 图2 - 1 游戏引擎的分层框架结构 2 3g t g e 游戏引擎的简介 2 3 1 g t g e 游戏引擎的工作原理及框架 本设计所使用的游戏开发引擎是2 d 游戏引擎g o l d e ntg a m ee n g i n e ( g t g e ) ,g t g e 是一个以j a v a 语言编写的高级跨平台游戏引擎。g t g e 由 g r a p h i c se n g i n e ,i n p u te n g i n e ,a u d i oe n g i n e ,t i m e re n g i n e ,i of i l ee n g i n e 和i m a g ee n g i n e 六部分组成,分别实现了图形处理、输入输出交互、声音处理、 时钟控制、文件读写和图像处理等功能。该六部分被集成到一个包中,方便了 游戏开发人员调用。g t g e 类包结构图如图2 2 所示: p a c k a g e k ,* 。 o 獬 、 le 酶骆 ;c 秘彩 g t g 琶u b r a r y 图2 - 2g t g e 游戏引擎结构图 g t g e 引擎让游戏开发者通过继承c o r n g o l d e n g a m e d e v 包中的g a m e 类,从而 快速实现自己的游戏。使用g t g e 引擎开发的游戏都是g a m e 类的子类,g a m e 类为我们实现了游戏的主循环,构建了一个游戏的基本框架。g a m e 类与游戏 间的关系如图2 3 所示: y o u rg a m e 图2 - 3g a m e 类与游戏间关系 c o r n g o l d e n g a m e d e v 类包中的所有游戏子类都要完成如下三项任务: 第2 章游戏引擎桐关内容综述 曼i m ! i i l- i i i i i ! g a m ev a r i a b l e si n i t i a l i z a t i o n :初始化游戏变量,如初始化游戏角色,背景等: g a m e u p d a t e :更新游戏变量,例如更新角色位置等: g a m er e n d e r :把游戏呈现在屏幕上,例如呈现游戏物体、角色和背景等 通过依次调用这三个抽象方法,就实现了一个游戏的主循环,游戏开发人 员只需往这三个方法中添加需要的游戏内容,即可实现一个基本的游戏过程。 游戏主循环如图2 4 所示。 # s t a r t i n gt h eg a m e i n i t r e s o u r c e s 0 ; r e p e a t ( g a t h e ri n p u t 主循环 u r e p n d d a e t e r ( ( 1 g o r n a p gh e l i a c p s 2 s e 。d t g ) i m e ( - s y n cf r a m er a t e u n _ t i le i l d c l e a n u p 拌g a m ee n d 图2 4g t g e 游戏引擎主循环 2 3 2g t g e 游戏引擎的优缺点 1 g t g e 的优点 ( 1 ) 跨平台g t g e 引擎是由j a v a 语言开发的,所以可以运行在任何具有j a v a 虚拟机的平台上,例如:w i n d o w $ ,l i n u xu n i x ,m a co s 等。 ( 2 ) 速度快g t g e 引擎在o p e n g l 的支持下,可以获得非常快的图形渲染 速度。 ( 3 ) 使用简单g t g e 致力于开发一套简单方便的游戏引擎,每个初学者都 可以快速的掌握使用g t g e 开发的方法。 东北电力大学硕士学位论文 ( 4 ) 自由软件g t g e 引擎是在c r e a t i v ec o m m o n sl i c e n s e 协议授权下的自由 软件,任何人都可以复制、发行、展览、表演、放映、广播或通过信息网络传 播本作品以及在该作品的基础上创作演绎作品【4 1 。 2 g t g e 缺点g t g e 引擎是一个功能强大的2 d 游戏引擎,但是还需要 在下列几个方面增加和改进。 ( 1 ) 人工智能与导航 ( 2 ) 场景系统 ( 3 ) 对话系统 ( 4 ) 游戏状态及进度管理系统 ( 5 ) 打斗功能 ( 6 ) 角色系统 ( 7 ) 数据库系统 l o 第3 章游戏引擎设计与实现 第3 章游戏引擎设计与实现 3 1 游戏引擎总体结构图 g t g e 引擎是一个功能强大的2 d 游戏引擎,但是,由于g t g e 引擎是开 发通用2 d 游戏的游戏引擎,所以与本文描述的r p g 游戏引擎相比较而言,还 有许多不完善和需要添加的功能。针对这种情况,为了开发基于r p g 游戏引擎 的游戏开发平台,必须进一步完善引擎的功能。根据需要,本文在详细研究 g t g e 引擎各个模块功能的基础上,充分考虑了作者的技术水平、研究时间、 经费等因素,新增和改进了以下几个功能模块。 1 人工智能与导航模块 2 场景管理模块 3 对话模块 4 游戏状态及进度管理模块 5 角色模块 6 打斗模块 7 数据库支持模块 总的游戏引擎框架结构如图3 1 所示: 嚣 图3 一l 游戏引擎框架结构 3 2 游戏引擎分析与改进 3 2 1g t g e 游戏引擎内核分析 引擎是游戏的核心,由于该引擎采用模块化的模式设计,因此本引擎核心 框架的设计成为本课题的重要组成部分,图3 2 所示是本引擎核心部分的类关 系图,其中类g a m e 是整个引擎的核心类,它初始化所有其他的引擎( 图形引擎、 声音引擎、输入输出、系统时钟等) ,并将所有的引擎封装在一起,同时建立一 个游戏运行的主框架。如下代码是g a m e 的主要方法, 1 p u b l i ca b s t r a c tv o i di n i t r e s o u r c e s 0 ; 2 p u b l i ca b s t r a c tv o i du p d a t e ( 1 0 n g1 1 ) ; 3 p u b l i ca b s t r a c tv o i dr e n d e r ( g r a p h i c s 2 dg r a p h i c s 2 d ) ; 4 p r o t e c t e dv o i di n i t e n g i n e 0 ) 5 p r i v a t ev o i ds t a r t g a m e l o o p 0 ) 其中方法i n i t r e s o u r c e s o ,u p d a t e ( 1 0 n g1 ) ,r e n d e r ( g r a p h i c s 2 dg r a p h i c s 2 d ) 是抽象 方法,它们在方法s t a r t g a m e l o o p 0 方法中被调用,主要功能是装载和初始化资 源、更新游戏数据、实时渲染场景,需要游戏的开发者在开发游戏的过程中, 覆盖这些方法来实现相应的功能。 g a m e e n g i n e 类继承了g a m e 类的所有功能同时增加了管理各个不同的游戏 实体( 如游戏介绍场景、菜单场景、游戏的各个不同的场景) 的功能。在 g a m e e n g i n e 类的实现中,每一个游戏的实体在g a m e e n g i n e 中都被表示为一个 g a m e l d ,不同的g a m e l d 代表不同的场景。在本引擎中使用类g a m e o b j e c t 描述 各个不同的游戏场景。g a m e l o a d e r 类是整个游戏的入口类。它通过调用 g a m e e n g i n e 类来实现整个游戏的运行。 1 2 第3 章游戏引擎设计与实现 图3 - 2 游戏引擎核心部分类图 3 2 2 基于游戏内核的各功能模块的分析 由于引擎的核心部分采用了模块化框架结构设计,所以在设计时,将除核 心部分的其他引擎按照模块化的模式来设计。这样有利于游戏根据不同的要求 订制来适应不同的目标。这些引擎根据功能的不同有划分为基本引擎和物理引 擎两个包,见图3 3 。 基本引擎包中包含了游戏必须的所有功能包括图形的渲染、声音播放、外 部资源的获取、用户事件的响应、内存的管理、时钟管理等。其中图形的渲染、 事件响应、时钟管理采用接口的形式,在运行时根据不同的操作系统获得相应 平台的功能。b a s e g r a p h i c s 接口提供了在屏幕进行绘制图形的全部功能,i n p u t 接口提供了相应键盘、鼠标等输入硬件的所有功能,b a s e t i m e r 接口提供了同步 游戏运行中各祯时间的功能,b a s e a u d i o 类提供了游戏中音乐的播放、循环、停 止等音频管理功能,b a s e l o 类提供了访问系统文件、数据的功能,由于游戏要 处理大量的图片,所以b a s e l o a d e r 类提供了对大量图片的载入、存储、处理的 功能。 基本引擎包中的所有功能都是在g a m e 类中的i n i t e n g i n e o 方法中初始化的, 游戏的开发者可以通过覆盖该方法来改变游戏所使用的功能。物理引擎描述了 东北电力大学硕士学位论文 游戏的场景、游戏中的人物( 精灵) 、碰撞检测、游戏字体管理、游戏地图。s p r i t e 类描述在游戏存在的具有一定外观、行为的游戏人物,b a n k g r o u n d 描述了人物 所在的环境即游戏地图,根据不同的要求地图又可设置为平面地图( 2 d ) 、斜视 角地图( 2 5 d ) 、三维地图( 3 d ) ,p l a y f i e l d 类描述了一个所有游戏对象活动的 舞台,这个舞台管理了游戏的所有角色、角色之间的碰撞检测 ( c o l l i s i o n m a n a g e r ) 、角色的分类、背景等的运作。 基本引擎包 b a s e g r a p h i c s b a s e l n p u t b a s e t im e r b a s e a u d i o ll b a s e l o il b a s e l o a d e r l l 图3 3 基本引擎包和物理引擎包 1 4 第3 章游戏引擎设计与实现 3 2 3 场景及场景管理模块的改进 1 场景场景【5 】是运行在游戏中的主控角色可以到达的场地。换句话说, 也就是如果没有角色,游戏本身就是由很多单独的场景相连组成。从程序的角 度看,场景是一种数据结构,不但包含了地图显示的图形信息也包含了精灵在 场景中活动所需要的物理信息,比如地图上有些地方是不可以通过的,而另外 一些地方可能高度和地图的其他地方不样。这些信息往往包含在游戏地图当 中。 r p g 类的精灵往往需要漫游游戏地图,所以游戏地图的规模一般很大,不 可能把游戏场景制作成整张图片。最常用的方法是拼接t i l e ,即整个地图用有 限的t i l e 地块拼接而成。使用t i l e 的方式,一般用一个二维数组表示一张地图。 二维数组很好的对应了二维坐标,数组中的每一个结点对应使用的某个t i l e , 整个二维数组就表示了一张完整的游戏地图1 6 j 。 g t g e 引擎中场景的创建比较简单,主要采用了4 种方式创建具体的场景。 第一种是采用单一颜色来作为游戏的背景,第二种是采用一幅完整的图片来作 为游戏的背景,第三种是采用t i l e 拼接的方式来完成游戏背景的绘制,第四种 方式采用了t i l e 拼接的方式来完成斜视角场景的绘制,但是功能不是特别完善。 在这几种方式中最适合r p g 游戏的就是采用t i l e 的拼接方式,具体的类图如图 3 - 4 所示: b _ d 田m 删 惭曲时 ! - 峨 l 锄出“ :m t : f 州- 蚰- 咄,q 自柏 。“,饥嗍 h 。k 印” 町 ,、p t 揶 i 口- 吖( ) 口 一, 酣- 州) r 唁i 枷 1 i _ 山_ t 呻 | 难晴o 1 _ 怕- m o i “m c 删 ! , t a z t - o ;- t a 舶 l 帕o :i - o ;i - 删 i _ - o ,。 图3 4 引擎中场景的实现类图 翼菱 东北电力大学硕l :学位论文 量皇曼曼舅曼曼皇! 皇曼曼曼曼量量曼ii,il i , 一_ i 曼毫皇皇 在图3 4 的实现方法中,只能绘制单层地图,也就是在t i l e b a c k g r o u n d 类 只能在一个层次上绘制场景,这不符合r p g 类游戏的要求。为了适应r p g 游 戏的要求,本文设计了一个三层的场景结构,第一层是地面层( i a y e r i ) ,所有 的角色都可在该层自由行走,并且该层的所有物品都会被另外两个层的物体覆 盖。第二层是障碍层( 1 a y e r 2 ) ,该层在地面层之上,所有的障碍物( 树木、房 屋等) 都被放置在该层,角色不能通过该层有障碍物的地方。第三层是场景切 换设置层( 1 a y e r 3 ) ,在该层放置的都是那些能够触发场景切换的图素,角色如果 走到该图素时那么将切换当前场景。 为了绘制三层结构场景,本文放弃了t i l e b a c k g r o u n d 类,从抽象类 a b s t r a c t t i l e b a c k g r o u n d 继承并产生了t i l e m a p 类,同时还设计了一个用来存储 t i l e 属性的t i l e d e t a i l 类,详细的类图如图3 5 所示: a b s r a c t t i l e b a c k g r o u n d ( 的ma b s t r a c t i o n ) a b s t r a c t f l e b a c k g r o u n d 0 e n d e r 01 1 l e d e t a l i e n d e r 5 1 e 0 ( f r o mx m l t o m a p ) e t l o c a - t i - o v n 0 锄d :i n t s e t m l e l o c a t i o n 0 跏“a l k a b l e :i r a g e t l l i e l 参c h a n g e d s c e n e l d :i n t g e t l q l e y 0 g e t l i l e a t 0 钾l e d e t a i t 0 g e t o f f s e t x 0: s e t g i d ( g i d :i n t ) :均树 g e t o f f s e t y 0 g e t g i d o :i n t g e t f i l e w i d t h 0 h 1 s e t w a l k a b l e ( w :i n t ) :树 g e t w a j k a b l e o :i n t g e t t i l e h e i g h t 0 g e t c h a n g e s c e n e l d 0 :i n t 伊s e t r i l e s i z e 0 s e t c h a n g e s c e n e l d ( s c s i d :i n t ) :、d d g e t t o t a l h o r i z o n t a f l i l e s 0 g e t t o t a l v e r t i c a l n l e s 0 s e t s i z e o ,。t i l e m a p 。(tornmap) 4 p b l m g :b u f f e r e d l m a g e o ;o l a y e r l i l e g i d :币l e d e 吐a 阳叩 郸l e m a p ( h o d z :i n t 。懈r t :i n t t i l e w i d t h :i n c t l l e h e i g h t :i n t ) ;i l q l e m a p ( h o r i z :i n t v e r t :i n t ,t i l e w i d t h :i n t t i l e h e i g h t :i n t b i m g :s u e 嘲g e i n g : l i l e d e t a i l 1 f l g ) 4 b s e t b u f f e r e d l m a g e ( b :b u l f e r e d l m a g e g ) :v o i d 4 b s e t l a y e r l i l e g i d i t g : r i l e d e t a i l l i 1 ) :, x ) i d 4 h , e n d e r l i l e ( g :g r a p h i c s 2 d t i l e x :i n t t i l e y :i n t x :i n t , y :孤:t o l d 图3 5t i l e d e t a i i 设计类图 1 6 第3 章游戏引擎设计弓实现 t i l e d e t a i l 类中主要存储类一个t i l e 图素的一些信息,属性g i d 唯一标识了 该t i l e 对应的图素在图像缓存b l m g 中的位置,例如g i d = 2 那么,该t i l e 的对 应图素存储在b i m g 2 中。属性w a l k a b l e 的值描述了该t i l e 是否为障碍物,如果 w a l k a b l e 的值为l ,那么表示角色在该t i l e 上可以行走,如果w a l k a b l e 的值为0 , 那么表示该t i l e 为障碍物,角色不能通过。属性c h a n g e d s c e n e l d 中存储的值是 将要切换到某个场景的唯一标识值,例如:如果c h a n g e d s c e n e l d = 3 ,那么角色 移动到该t i i e 上时,场景管理模块会自动根据该值将游戏场景切换到标识为3 的场景中。 t i l e m a p 类实现了分层绘制场景的功能,属性b l m g 是一个b u f f e r e d l m a g e 类 型的一维数组,数组内存储是在当前场景当中所有的相异图素,也就是说在b l m g 中没有重复的、相同的图素,这样的设计减少了图片所占用的内存,大大提高 了游戏运行效率。属性l a y e r t i l e g i d 是一个t i l e d e t a i l 类型的3 维数组,第一维 表示该游戏场景的某一层,例如:存储在l a y e r t i l e o i d 1 的t i l e d e t a i l 对象都 是出于场景第二层的障碍物。第二维和第三维描述的是在场景中某一位置,例 如;存储在l a y e r t i l e g i d 1 1 0 1 0 q b 的t i l e d e t a i l 是指位于第二层中第1 1 个地 图x 坐标和第1 1 个地图y 坐标处的t i l e d e t a i l 对象。其主要方法如下: t i l e m a p ( i n t h o r i z ,i n tv e r t , i n t t i l e w i d t h ,i n t t i l e h e i g h t ,b u f f e r e d l m a g e 】 b i m g ,t i l e d e t a i l ul t g ) :该方法是一个构造方法,用来初始化场景的基本数据 结构。 r e n d e r t i l e ( g - r a p h i c s 2 dg ,i n tt i l e x ,i n tt i l e y , i n tx ,i n ty ) :该方法覆盖了基类 r e n d e r t i l e ( g r a p h i c s 2 dg , i n tt i l e x ,i n tt i l e y , i n tx ,i n ty ) 抽象方法,此方法被游戏引擎 自动调用来绘制本文设计的三层场景。其中和t i l e y 是地图坐标,而x 、y 是实 际游戏屏幕坐标值。实现代码如下: p u b l i cv o i dr e n d e r t i l e ( g r a p h i c s 2 dg ,i n tt i l e x ,i n tt i l e y ,i n tx ,i n ty ) i n tt i l e ; f o r ( i n ti = 0 ;i o ) g d r a w l m a g e ( b l m g t i l e ,x ,y , n u l l ) ; ) 东北电力大学硕: :学位论文 , 2 场景管理模块任何一个大型游戏都是有若干场景组成,游戏玩家玩游 戏的过程中会经历无数次的场景的变换。另外,游戏的精灵、道具等都需要在 场景产生时实时形成的,因此,为了对场景切换实施有效管理,在决大多数功 能完善的游戏引擎中都设计了专用的场景管理模块。g t g e 引擎中也具有场景 管理功能【7 】,并且该功能是g t g e 引擎核心模块,但是功能不是特别完善,可 以这么说,它不能满足本文灵活、可扩展性强的要求,g t g e 中场景管理模块 的实现类图如图3 - 6 所示: g a m e ( f r o mg a m e d e v ) g a m e e n g i n e ( f r o mg a m e d e v ) 岛b :i n t n e x t g a m e l d :i n t 1 3 ;a m e e n g i n e 0 s t a r l g a m e l p o i n i t r e s o u r c e s ( ) u p d a t e ( ) 4 r e n d e r ( ) , 4 r e f r e s h ( ) g e t g a m e o g e t c u r r e n t g a m e o g e t c u r 呛n t g a m e i d o + n e x t g am e 图3 - 6 场景管理类图 g a m e o b j e c t ( f r o mg a m e d e v ) g t g e 引擎中每一个场景都对应一个g a m e o b j e c t 象,每一个g a m e o b j e e t 对象都有一个唯一标识g a r n e l d 。在核心类g a m e e n g i n e 类中有一个属性 第3 章游戏引擎设计与实现 i i n e x t g a m e l d ,当游戏运行过程中,n e x t g a m e l d 必须指向当前场景唯一g a m e l d 值。在场景切换时,只要将n e x t g a m e l d 值改变为将要切换到的场景的g a m e l d 值,就可以实现场景的切换。 在本文设计的引擎中,需要实现场景的t t 动切换、场景中角色、物品的自 动定位、游戏寻径、角色状态确定。为了完成上述功能,本文采用数据库来支 持场景的初始化和采用有限状态机来控制游戏在当前场景中的运行。数据库来 支持场景的初始化即将所有参数存储在数据库中,游戏运行过程中,当场景切 换时,动态的从数据库的相应表中提取相关参数。具体的实施方案如图3 7 所 示: 。j 一。 7 7 :,i ”哿? ,r 黟棼j j j 誓“饶;? r 。j 曼 , 4 7 显一嘲m q r ,二 功_ : 场 jf 兮素t ! 景 ,管 :i 理 舞 图3 - 7 场景管理与数据库实施关系图 对于在场景之中必须的角色、道具、脚本等元素,本文都创建了相应的数 据库表,当场景创建时场景管理模块从数据库中提取角色、道具、脚本等信息, 并依此为依据来完成场景的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论