android手机引擎的设计与实现_第1页
android手机引擎的设计与实现_第2页
android手机引擎的设计与实现_第3页
android手机引擎的设计与实现_第4页
android手机引擎的设计与实现_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

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

文档简介

android手机引擎的设计与实现

0游戏引擎的发展现状智能手机是指独立的操作系统,支持用户下载、安装第三方服务提供商提供的聊天、游戏和其他应用程序,并通过移动通信网络实现无线网络接入的手机的总称。目前,主流的智能手机操作系统有Android,iOS和WindowsMo-bile等系统。其中,Android是由Google开发的开源操作系统,其SDK已非常完善。随着Android手机成本的下降,以及Google公司成功收购摩托罗拉移动公司,其市场占有率将更大。所以,基于Android平台的游戏等各种应用开发将具有广阔的发展前景。对游戏创意的良好性能支撑,提高开发效率,缩短开发和推出市场的周期,都是影响一款游戏是否成功的关键因素,而这些因素的改善都与游戏引擎的设计息息相关。游戏引擎是为运行某类游戏的机器所设计的,并且能够被该机器所识别的代码集合。经过不断的发展,游戏引擎已经成为一套由多个子系统共同构成的复杂系统,控制游戏的执行,使玩家与终端能够交互[1]。在现代手机游戏中,游戏角色的真实感体验是衡量游戏品质的一个重要标准[2]。通常游戏的真实感体验由图形渲染、物理模拟和人工智能等模块完成。目前,已有的手机游戏引擎在图形渲染和物理模拟方面取得了长足的进步,但其人工智能模块仍然显得简单甚至没有[3],应用这些引擎设计出的游戏其非玩家控制角色过于迟钝或者程式化,影响了游戏的真实性,所以游戏引擎的人工智能仍有很大的发展和创新空间[4]。对于在线游戏而言,由于这类游戏需要技术性能和用户感知视觉质量并举[5],对人工智能技术的需求很大。同样在3D游戏开发中,相对于游戏引擎的其它部分,人工智能的研究力度还有待进一步加强,比如路径搜索算法[6]直接影响着游戏的响应速度[7]。当前越来越多的游戏引擎是基于移动平台的。当游戏越来越复杂的时候,软件基本开发方法将很难满足这些游戏的开发要求。文献研究结果表明,在移动平台上开发一个游戏引擎时,选定一个设计模式,理清设计目标和思路是很重要的。本文通过对Android游戏的程序结构进行研究,基于模块化的思想,设计实现了一个基于Android系统的2D游戏引擎LAndGame2D,重点对人工智能模块中的基本算法:最短路径搜索算法进行了优化,有益于提高游戏的真实感体验。1功能集的开发游戏引擎是面向游戏开发的通用内核,将游戏程序设计中最通用的功能集成为一个游戏开发平台。通常游戏引擎包括的模块有智能模拟、物体成像、物理演算、碰撞运算、角色的操作、声音管理等,游戏开发人员可以通过API函数调用这些模块,快速方便的开发游戏。1.1游戏控制类设计游戏引擎,首先需要分析游戏的运行机制,提取游戏的基本构成元素。Android游戏主要包括一个Activity类、一个流程控制类、一个游戏线程类和若干个游戏对象类。其中Activity类是游戏程序的基本执行单元,控制复杂的游戏生命周期,如游戏的启动、暂停、退出等。游戏控制类提供了游戏的界面切换的方法。游戏线程类循环检测可能发生的各种事件,计算游戏状态,刷新屏幕。游戏对象类需要定义对象和执行动作。当游戏事件触发时,游戏对象通过回调函数调用相应的操作。Android平台游戏运行机制如图1所示。1.2人工智能中的最短路径搜索在游戏设计中通常采用的人工智能技术主要有模糊逻辑、有限状态机、寻径算法等。模糊逻辑使用模糊值来表示模糊的概念和进行知识推理,被广泛应用于决策推理和行为选择。例如,非玩家角色评估玩家展示的威胁,控制非玩家队友的行为等。有限状态机是基于规则的人工智能系统,来源于自动机理论,可以管理整个游戏场景,也可以操作单个游戏对象和人物。寻径算法是游戏开发中的常见算法,非玩家角色需要在较短时间内找到由当前位置到主角位置的最短路径并且避免与障碍物碰撞,其依赖的核心基础是人工智能中的最短路径搜索算法。在现有游戏引擎中,对于最短路径求解问题,先后有深度优先算法、广度优先算法、Dijkstra算法、A*算法等诸多算法被提出。其中,深度优先和广度优先算法属于状态空间搜索算法,其最大缺陷是搜索速度低,当状态空间很大或者不可预测的情况下则无法给出最优解。Dijkstra算法能够保证搜索成功率,但是由于需要遍历计算的节点过多,所以搜索速度慢。而A*算法是启发式搜索算法,它只需要产生全部状态空间的部分结点及关系,就可求解,搜索效率较高,但是由于该算法没有回溯,不能确保寻找到的路径一定是最优路径。近年来,遗传算法因为其强大的并行搜索能力,也被用来求解最短路径问题,其搜索成功率优于A*算法,且搜索速度优于Dijkstra算法。但标准遗传算法存在易陷入早熟的缺陷,采用该算法实现寻径,则在游戏中常导致非玩家角色在一个角落不停地绕圈。显然,这会极大影响玩家的真实感体验。综合考虑算法的搜索速度和搜索成功率,本文引入Boltzmann行动选择策略解决标准遗传算法易早熟的缺陷,并以此优化遗传算法作为引擎寻径问题求解的基本算法。2非精确状态下的行动选择策略Boltzmann行动选择策略是一种被搜索算法所采用的,适于求解非精确状态信息下的顺序决策过程问题的行动选择策略。本文所改进的遗传算法利用基于Boltzmann行动选择策略[9]替代轮盘赌选择策略,从而解决标准遗传算法容易早熟的问题。2.1算法熟化能力标准遗传算法一般采用轮盘赌选择策略,给定种群规模为n的群体p={a1,a2,···,an},个体aj∈P的适应值为f(aj),其选择概率为式(1)决定后代种群中个体的概率分布。当种群中个体的适应值差异较大时,最优个体和最差个体被选择的概率之比成指数级增长。最优个体将显著增加在下一代的生存机会,而最差个体的生存机会则会被剥夺。最优个体快速充满种群,从而导致种群的多样性迅速降低,遗传算法也就过早地丧失进化能力,陷入算法早熟问题。Boltzmann行动选择策略采用随机接收准则选择行动,并根据当前状态下可选行动的估计价值决定选择行动的概率。Boltzmann选择机制可以有效地解决优化算法难以避免的局部最优问题,使系统最终演化到全局极小点[10],寻找到最优的行动选择策略。设行动全体集合为A,行动估计价值集合为VA,a1,a2,…,an∈A为当前状态下可选的行动,而v(a1),v(a2),…,v(an)∈VA分别为各行动估计价值提出对应的估计价值,当前状态下选择任一行动ak{a1,a2,…,an}的概率为其中,k=1,2,…,n,T>0是退火温度,是控制进化过程中选择压力的关键,在种群的进化过程中,进化早期时选择压力较小,适应值较差的个体也需要一定的生存能力,退火温度缓慢地递减;进化后期需要较大的选择压力来缩小搜索邻域,加快最优解改善的速度,退火温度递减也需要越快,因此退火温度变化趋势应该是不断成非线性下降的过程,所以,本文引入神经网络中的Sigmoid函数作为退火温度的变化系数,即其函数曲线图如图2所示。基于Boltzmann选择机制的遗传算法中个体被选择的概率定义为式中:n———种群规模,c———种群进化迭代循环次数,m———最大迭代次数,T0———退火温度初始值,Tmin———冷却温度。T会随着迭代次数的增加而减小,选择压力就随之增大,最终达到冷却温度。2.2算法有效性测试为了验证算法的收敛性能以及跳出局部最优解的能力,本文对基于轮盘赌选择的标准遗传算法(SGA)和基于Bo-ltzmann选择的优化遗传算法(BGA)进行了比较测试。测试选取3个经典的遗传算法性能测试函数,这些测试函数都是既有全局解又有多个极值点的函数其中,-2.048≤xi≤2.048,i=1,2;该函数是二维单峰难以极小化的病态函数,函数最小值是0其中,-3≤x1≤3,-2≤x2≤2,函数最小值是10.316其中,-10≤xi≤10,i=1,2,函数最小值是186.731。用SGA和BGA两种遗传算法,对以上的测试函数进行100次计算,求出收敛值。其中,计算机的配置为Pen-tium(R)4微处理器,主频为2.8GHz,内存容量为1.5G。遗传参数设置:种群规模为60,最大迭代次数100,交叉率0.8,变异率0.05。计算结果见表1和表2。表中结果都是平均值,收敛时间单位为s。由表1和表2可知,BGA遗传算法虽然在收敛时间开销上比SGA遗传算法有所增加,但是成功的收敛次数多,提高了算法的收敛率,而且收敛的极值更加接近理论计算得到的函数值,收敛的稳定性较好,从而很好的避免了遗传算法陷入早熟的问题。此外,我们对BGA遗传算法和A*算法在游戏设计中的应用效果进行了比较。图3和图4是某次设定的两点最短路径搜索效果示意,显然,BGA遗传算法优于A*算法寻找到的路径。由于搜索速度快,A*算法在游戏设计中广泛采用;但是,A*算法不能回溯,不一定能够找到最短路径,表现在游戏中就是非玩家角色易走错路、乱跑、行为飘忽和绕圈子等。相反,BGA遗传算法则能保证较高的最短路径搜索成功率,非玩家角色能智能地找到主角位置,增加了游戏的真实感体验。虽然在时间开销方面,BGA遗传算法搜索速度逊于A*算法,但由于当前嵌入式CPU的主频极高,玩家体验不出这种时间开销差别。综合考虑,我们采用BGA遗传算法作为基础寻径算法。3游戏引擎的设计和实现3.1游戏系统模块结构游戏引擎是一种中间件,它是依赖操作系统来控制硬件的。本文设计的游戏引擎LAndGame2D架构在操作系统层之上,其主要包括图形引擎、物理引擎、人工智能模块,网络模块、音效模块、工具模块、事件处理模块等等[11],模块结构如图5所示。其中,游戏的核心类是为游戏提供框架,主要实现游戏逻辑类、流程控制类。人工智能模块是提高游戏的智能,增加游戏的真实感体验。图形引擎的功能是用于产生游戏角色及周边场景的图形,把读取的所有数据及时转化成屏幕显示的图形。物理引擎用于在游戏中准确地实现物理模拟,通过刚体物体赋予真实的物理属性的方式来计算运动和碰撞。网络模块负责游戏的联网对战任务,管理游戏中所需要交互的数据的传送工作。音效模块主要处理播放声音和声音的管理功能。工具模块是将游戏中常用的操作进行封装,如向量计算、定时器等。事件处理完成对用户输入操作进行响应和对游戏内部事件处理的功能。3.2人工智能模块设计在游戏逻辑类的实现中,LAndGame2DActivity是游戏的主类和入口程序,将对整个游戏的生命周期进行控制,同时还提供了事件处理函数。比如:处理按键、触摸等。LAndGame2DActivity继承了Android应用框架提供的Ac-tivity类。流程控制类主要用于游戏状态机制来控制不同界面之间的切换,状态机制就是对游戏定义多个状态,每一个状态所显示的界面都不同。游戏引擎框架中的流程控制类是LAndGame2DView,该类继承自Android应用开发框架层的SurfaceView类,SurfaceView类的实现原理是在绘图之前必须使用lockCanvas方法锁定画布,得到画布后在画布上进行绘制,绘制完成后使用unlockCanvasAndPost方法解锁画布,最后显示到屏幕上。线程类使用run()方法可以随时监听事件的触发,进而改变状态,更新界面显示。监视事件需要继承SurfaceHolder.Callback接口增加回调函数。人工智能模块主要实现了基于Boltzmann选择遗传算法的寻径算法、模糊逻辑和有限状态机。基于Boltzmann选择遗传算法的寻径算法实现步骤是首先为染色体进行二进制编码。由于游戏地图是由一些单元格组成,当非玩家角色处在起始点时运动方向有上、下、左和右4种选择,因此需要用两个比特表示这4种情况。见表3。接着产生初始种群个体,设置遗传算法的参数,测试每个染色体能使非玩家角色所能到达的最远位置距离目标点的长度,即计算适应度值。函数CalculateFitnessValue()经过计算会返回一个适应度值,其中计算适应度值的程序如下:程序中dist_x和dist_y就是非玩家角色所在的位置相对于目标点的水平和垂直偏离值。如果非玩家角色到达出口,则dist_x+dist_y=0。计算两点间距离比较常用的方法是两点间距离坐标公式,但是为了优化程序的性能,减小计算量,可以利用不需要开方和平方的蒙特卡罗距离计算两点间距离。dist计算的就是蒙特卡罗距离。最后通过Boltzmann选择选出参与交叉的两个个体后,实现交叉和变异操作后得到新的染色体继续加入新的群体,完成一次迭代过程。不断重复以上过程直到非玩家角色到达目标点。模糊实现了几种归属函数,如布尔归属函数,三角形归属函数,梯形归属函数等。模糊处理定义了联集、交集、补集操作。有限状态机定义了一个简单状态机框架。图形引擎主要是负责地图场景管理模块的实现。地图管理中的图层对象由Layer类实现,Layer类封装一个可视元素的位置、宽度、高度和可见性等信息。图层不是每次显示一个单个的图像,而是显示多个依次排列的图像,当创建图层时,通过指定贴砖排列构成图层。图层要求所有的贴砖图像大小必须相同。当布置贴砖栅格时,贴砖可以按任意的组合方式混合和匹配。物理引擎是通过刚体物体赋予真实的物理属性的方式来计算运动和碰撞。本文设计的物理引擎主要提供碰撞检测技术的功能。在游戏中实体对象的位置改变的情况下会发生碰撞,实现碰撞检测主要包括:确定检测对象、检测是否碰撞、处理碰撞这3个方面。碰撞对象主要分为游戏实体对象之间的碰撞和游戏实体对象与环境之间的碰撞。网络模块为游戏支持网络服务。网络连接主要分为互联网和局域网,互联网需要封装Http协议,可以通过标准java接口实现Android游戏引擎的联网操作,另外需要注意网络通信的中文乱码问题。局域网则主要封装蓝牙连接及传输数据的功能。音效模块提供对背景音效和动作音效的管理,其中包括音乐类型、当前播放次数、音乐结束处理,循环播放音乐、音乐模式管理等函数。工具模块主要封装游戏经常使用的工具类。实现的工具类主要有计时器类、坐标类、随机数类、字符串扩展类、文件操作类等。事件处理模块主要负责用户和手机终端交互的处理,需要考虑到事件的类型、发起者、被发起者、事件参数等因素。当一个事件被触发时,发送消息给事件响应者,事件响应者收到消息后,根据消息的内容来判断处理相应的事件。4飞行弹射游戏的实现在游戏引擎LAndGame2D完成的基础上,本文利用该游戏引擎开发了一款飞行射击游戏,该游戏运行的流程图如图6所示。根据游戏流程图将飞行射击游戏划分为5个模块:(1)移动模块和炮弹生成模块,完成飞机和炮弹的移动、生成功能,主要由图形引擎中的人物显示模块完成。(2)

温馨提示

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

评论

0/150

提交评论