曾翔宇
(湖南科技学院 电子与信息工程学院,湖南 永州 425199)
动作类游戏是最传统的游戏类型之一,主要由玩家所控制的人物或角色根据周围环境的变化,利用键盘或者手柄、鼠标的按键作出一定的动作,如移动、跳跃、攻击、躲避、防守等,来达到游戏要求的相应目标,一般是为了过关。TV GAME早期的作品多数集中在这个类型上。
通过了几代游戏机种的变化和发展,现在的动作类游戏中已经融入了更新鲜的元素、更完整的剧情、更复杂的机关解谜,这些都使动作类游戏逐渐成为所有类型游戏里面款式最丰富的一种。代表作品:《波斯王子》《鬼泣》系列、《超级忍者》系列(是SEGA经典系列正宗ACT代表),还有《超级玛丽》《刺客信条》《真三国无双》等。
本文通过设计并实现在Android平台上的空战游戏《3D空战》,阐述了此类游戏的开发过程及实用的开发技巧。
《3D空战》是一款很好玩的3D飞行射击游戏,在游戏中你要控制一架模拟战机,完成不同的任务。全3D的画面,游戏场景的设计别具一格,虽然画面是全3D打造,不过运行非常流畅,在Symbian系列手机系统中广为流行。游戏的玩法和同类3D飞行游戏类似,上下左右键控制飞机运动,确定键进行射击,游戏的目标就是完成每关的任务,也就是击落一定数量的敌机。不过敌机也可以射击,你要做的是控制好自己的战机,尽量和对面呼啸而来的敌机导弹保持距离。该游戏最大的特点就是巧妙而又丰富的场景设计—天空球和陆地球,这也是3D游戏吸引人的特点之一[1]。同时也是非常有挑战性的游戏,面对不断飞驰而来的炮弹,你要操作你的战机,努力躲避空中的炮弹,同时发射导弹击落敌机,当击落的敌机数大到一定数量时,就可以成功过关了。
《3D空战》游戏的规则很简单,玩家驾驶着自己的飞机向前飞行,在飞行的过程中,会从不同方向飞出向玩家发射炮弹的敌机,玩家可以按下手机上的确认键发射炮弹击落敌机,也可以通过上下左右键控制飞机躲避,当击落的敌机数到一定数量时,玩家就闯关成功,进行下一次挑战。下面具体进行阐述。
(1)启动游戏后首先进入的便是游戏声音设置界面。单击“是”,则开启游戏声音,单击“否”,则关闭游戏声音。
(2)声音设置完毕后,返回主界面。该界面共有5个菜单,分别是关于游戏、游戏设置、快速游戏、游戏帮助及退出游戏。
(3)在开始菜单界面若单击“游戏设置”,则进入游戏声音设置界面。可进行声音设置。
(4)游戏主界面若单击“关于游戏”,则进入游戏关于界面。该界面介绍了关于本游戏的相关信息。
(5)游戏主界面若单击“游戏帮助”。该界面显示了游戏的操作规则和操作方法。
(6)在开始菜单界面若单击“快速游戏”,则首先切换到游戏加载画面,然后开始游戏。开始菜单界面若单击“退出游戏”,则会自动结束游戏,返回手机桌面,若要重新运行,在应用程序中单击小飞机图标,就可以重新开始游戏。
(7)游戏开始的画面:在一开始,自己的飞机在屏幕中间位置,敌机则由远及近从不同角度对我机射击。屏幕的左上角显示的是我机的数量,当被敌机击中之后,其数量会相应减少,替换我机继续进行游戏,当我机全被敌机击中后,则表示游戏失败。屏幕右上角是击落的敌机数量,当击落10架敌机,则闯关成功。
(8)游戏进行中:敌机从上到下,由远到近对我机进行射击。
(9)战机被敌机击中,并发生爆炸时的场景。
(10)当玩家完成规定的任务时,则游戏胜利,进入游戏胜利界面。玩家飞机全被击落之后,则游戏结束,进入失败界面。
人们自古以来就对浩瀚的太空充满好奇,同时也不断地探索着这块未知的领域,正是由于这样,出现了许多以太空为中心题材的游戏,比如《太空保卫战》等一些游戏。《3D空战》也是这种3D动作飞行射击游戏,玩家控制自己的战机遨游天空,需要玩家注意力集中,当玩家投入到游戏中后,就可以体会到穿越高山、海洋、在空中邀游的完美体验。开发这款游戏的目的是在Android平台上的游戏开发提供一个指导方案,而不是生产商业化的游戏产品。
游戏的准备工作通常是根据游戏的策划来制作游戏所用的图片、声音等。由于图片的加载在游戏中比较耗时,建议把一些小的图片纹理,如飞机的机翼纹理、机身纹理、螺旋桨纹理等集成到一张图片上,以缩短游戏加载时间,提高运行速度。对于纹理的大小,不应太大,适当大小即可,这样可以节省内存资源。另外,还有准备好游戏中用到的声音文件。如炮弹发射声音、敌机发炮声音、爆炸音效、背景音乐等[2]。
程序中开始菜单、声音设置界面、关于界面、帮助界面、加载界面及胜利界面均以2D实现。以上界面均直接自定义SurfaceView并重写了其中的onDraw()方法,所有的按钮均是作者用贴图实现的,避免了使用Android自带控件,使游戏画面更加绚丽、个性。
游戏时的界面使用3D技术实现,游戏界面直接自定义了GLSurfaceView并实现了Renderer接口,通过重写onKeyDown()方法、onTouchEvent()方法实现与用户的交互。本游戏使用了简单的碰撞检测算法。实际商业化游戏开发中,往往使用的碰撞检测算法是更有效率、更准确、更成熟的算法。而这些算法往往都是由数学家来研究的。
接下来将通过游戏的运行过程阐述各个类在游戏中的作用,游戏的运行步骤如下。
(1)启动游戏后,首先在G L D e m o中初始化StartSurfaceView,然后将用户界面切换到声音设置界面。
(2)设置完游戏声音后,StartSurfaceView将调用其中的setMenuView方法,将界面切换到主菜单界面。
(3)在主菜单界面StartSurfaceView中,根据不同的菜单项调用不同的方法,进入不同界面。如果单击关于,则调用setAboutView方法,进入关于界面。
(4)当主界面调用setMySurfaceView后,进入游戏界面,首先MySurfaceView会初始化背景类、地板类、建筑块类、钢丝绳类等场景类来绘制场景。同时将启动线程ActionThread来刷新界面,同时进行动画的绘制和碰撞检测。
(5)游戏界面类中有一个消息处理器,MySurfaceView中有一个线程时时刻刻检测是否胜利,如果胜利就发送消息,然后交给消息处理器处理,GL Demo调用setWinView方法,切换到胜利界面。
(6)在胜利界面,触摸屏幕任意处,则GL- Demo调用setMenuView方法,切换到开始菜单界面[3]。
下面阐述游戏中控制物体运动的线程和碰撞检测的实现,以及用户的交互,这些类中控制hero机和敌机的飞行,hero机炮弹和敌机炮弹的飞行,以及各种碰撞检测。
(1)飞机是如何按路线飞行的,主要包括飞机路线设计器和游戏中的MoveThread线程。飞机的每条路线由4个点构成,第1个点和第4个点在屏幕外,第2个点和第3个点在屏幕内,让飞机沿着这条路线飞行,就能保证飞机从屏幕外面飞进来,最后又飞出屏幕的效果。
由此可以用一个程序来生成多条不同的飞机路线,在游戏中让这多条不同路线循环出现,这样既能保证路线的多样化,又能节省资源,使游戏具有可玩性。
(2)飞机发射炮弹后,炮弹被添加进炮弹列表,炮弹列表里面所有的炮弹在单独线程中按既定的路线飞行,并且需要处理碰撞检测和生命周期检测。
—款多关游戏,总是能激发玩家的挑战心理,对玩家有更大的吸引力。在玩家眼中,离开了闯关的刺激,游戏的体验就会大打折扣,所以增加游戏关数是游戏开发中必不可少的。本游戏中,并没有设置游戏关数,在以后的研究中可以改进程序,增加游戏关数,每闯一关,游戏难度越大,以提升玩家的体验。
游戏应该开发成多种模式,不同的模式带来不一样的体验,单一模式会让游戏很快失去对玩家的吸引力。同时应该增加游戏难度的选择功能,使玩家根据自己的情况选择不同的等级进行游戏,这样才更加合理。
如果能在游戏过程中通过捡装备改变子弹种类或者数量,比如hero机吃到了一个晶体之类的东西就可以让炮弹数量更多或更快,会大大提高玩家对本游戏的体验,在以后的研究中可以自行开发完成此功能。
[参考文献]
[1]吴亚峰.Android3D游戏开发技术详解与典型案例[M].北京:电子工业出版社,2012.
[2]夏有新.Android3D游戏模型纹理处理[J].硅谷,2013(11):103-104.
[3]林深华,范志尚,蒋建兵,等.基于Android平台Unity3D游戏设计与实现[J].企业科技与发展,2013(10):40-42.