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