1、Microcomputer Applications Vol. 30, No.6, 2014 研究 与设计 微型电 脑应用 2014 年第 30 卷第 6 期 13 文 章编号 :1007-757X(2014)06-0013-03 基于 Android 的飞行射击游戏的设计与实现 郭一晶,吴文树 摘 要: 运用 Android 手机开发的技术, 结合基本游戏开发原理, 设计与实现飞行射击的游戏。 首先, 介绍了开发平台 , 接 着, 对游戏进行需求分析和总体设计, 设定游戏架构为 MVC 模式, 分 为图形绘制系统、 数据同步系统、 碰撞检测系统、 自 动射击系统和用户输入系统。最后,重点介绍
2、了游戏各个子系统的设计、核心算法和游戏代码的优化。 关键词:飞行射击;游戏开发;Android 中图分类号:TP311 文献标志码:A Design and Implementation of Flight Shooting Game Based on Android Guo Yijing, Wu Wenshu (Xiamen University TanKahKee College, Zhangzhou363105, China) Abstract: Combined with the basic principles of game development, flight shooting
3、 game is designed by using technology of An- droid mobile phone development. The development platform is introduced first. Then requirements analysis and system design are discussed. The development mode is set to MVC architecture. The system is divided into a graph drawing system, data synchroniza-
4、 tion system, collision detection system, automatic fire system and user input system. Finally, the game focuses on the design of each system, the core algorithm and optimization of game code. Key words: Flight shooting; Game Development; Android 0 引言 随着手机行 业的 不断发展 ,手 机硬件性 能的 不断增强 , 手机软件系统的不断完善, 手机功
5、能越来越丰富, 最早只能 用于通信, 后来可以播放音乐、 浏览网站、 玩一些简单的游 戏, 直至今日可以播放视频, 甚至玩大型的游戏, 手机已然 成为集合通 信功能与娱乐 功能 为一体的 设备 。在此 背景下 , 许多人投入了手机游戏开发的热潮之中。 1 开发平台简介 1.1 Android 系 统简介 安卓操作系统 Android 平台是谷歌收购 Android 公司后 于 2007 年 11 月 5 日正式公 布的一款手机操作系统平台, Android 基于 Linux 内核,采用了软件叠层的架构,其架构 如图 1 所示 1 : 图1 Android 结构 1.2 开发环境简 介-Andr
6、oid SDK SDK (software development kit ) 是软件开发的工具包, 被软件开发工程师用于为特定的软件包、 软件框架、 硬件平 台 和 操作系统等建立应用软件的开发工具的集合。因此, Android SDK 指 Android 专 属的软件开发工具包 2 。 1.3 开发工具简 介-Eclipse Eclipse 是一个 开放源代码的、 基于 Java 的可 扩展开发 平台。 就其本身而言, 它只是一个框架和一组服务, 用于通 过 插件组件构 建开发环境。 幸运的是,Eclipse 附带了一个 标准的插件集, 包括 Java 开发工具 (Java Develop
7、ment Kit , JDK)。 2 需求分析 2.1 游戏系统需 求 游戏中包含 5 个系统: 图形绘制系统,数据同步系统, 碰撞检测系统, 自动射击系统和用户输入系统。 图形绘制系 统即图形渲染系统, 是在视图层, 主要把所有的视图元素绘 制在屏幕上, 这是游戏的核心。 数据同步系统是视图层与模 型层之间的一个接口, 保持图形层绘制最新的数据, 减少游 戏延迟, 从而提高游戏体验。 碰撞检测系统是检测游戏中的 各种碰撞情况, 对于飞行射击类游戏来说, 这个系统必不可 少。 自动射击系统是指一进入游戏, 主角飞机就自动不断释 放子弹, 因为是开发触屏手机上的游戏, 如果频繁按射击键 会很不方
8、便。 用户输入系统主要包含了大方向盘和两个小按 钮的事件反应, 还有各个界面的按钮事件处理, 大方向盘上 触摸的位置不同会产生不同方向的按钮效果。 2.2 游戏细节需 求 作者简介:郭一晶(1980-) ,男,回族 ,福建仙游人,厦门大学嘉庚学院,讲师,硕士,研究方向:计算机软件与应用,福建漳州,363105 吴文树(1989-) ,男 ,福建漳州人,厦门大学嘉庚学院,研究方向:软件工程,福建漳州,363105 Microcomputer Applications Vol. 30, No.6, 2014 研究 与设计 微型电 脑应用 2014 年第 30 卷第 6 期 14 为了增加游戏趣味性
9、, 游戏中需设计一些小系统, 包括 怒气系统, 炸弹系统, 特效系统和道具系统。 怒气系统指当 玩家击落对方敌机的时候会活的一定怒气, 有了怒气可以使 用一个怒气技能, 该怒气技能会释放出两个螺旋镰刀, 镰刀 碰到屏幕两边会反弹, 镰刀可以攻击敌人。 炸弹系统指释放 一次强大的爆炸, 让屏幕内的所有地方子弹都消失, 该技能 允许玩家在来不及躲避敌人子弹时自救。 特效系统主要体现 在游戏画面上, 敌人飞机被击落时会发生爆炸, 要在相应位 置播放一个爆炸特效, 玩家释放怒气攻击时会在主角飞机上 播放一段闪光的特效, 让玩家清楚知道使用了怒气攻击, 玩 家释放炸弹时在主角飞机上播放一段类似保护层的光
10、圈效 果, 目的是为了增加视觉享受。 道具系统指游戏内玩家主角 飞机可以使用 3 种不同类型的子弹, 每种子弹有 3 个不同的 火力等级, 对应的游戏中会出现 3 种不同类 型的道具, 玩家 获得道具后就可以提升火力等级或者改变子弹的种类。 3 飞行射击游戏的实现 3.1 操作设计 游戏采用的操作为传统的操作方式, 控制方向的按钮共 8 个, 上、 下、 左、 右、 右上 、 左上、 右下 和左下。 另外还 有 2 个按钮键 ,一个是蓄力攻击按钮,另一个是炸弹按钮。 方向键盘设计成一个大圆形, 玩家触碰到圆形的时候会根据 触碰的位置判断是哪个方向, 方向键的大圆形放置在屏幕底 端的左边,另外
11、2 个按键放 置在屏幕底端的右边。 3.2 关卡设计 游戏根据剧情需要设计了 3 个关卡。 第一个关卡的背景是森林背景, 目的是为了与第一关卡 的 BOSS 一条 龙的形象配合。 第二个关卡的背景是工业区背景, 目的是为了与第二关 的 BOSS 机器 人的形象配合。 第三个关卡的背景是宇宙空间的背景, 目的是为了配合 剧情需要,BOSS 逃到了外星 空间, 而主角也追到了外星空 间。 如图 2 所示: 分别为各自关卡的 BOSS 截图,其中图 2(a)、图 2(b) 和图 2(c)分别是关卡 1、2 和 3 的截图。 (a )关卡1 的BOSS (b )关卡2 的BOSS (c)关 卡 3 的
12、BOSS 图2 各自关卡的BOSS 截图 3.3 核心算法 (1)碰撞检测算法 要进行碰撞检测, 首先要对需要进行碰撞检测的各个对 象之间进行 2D 图形建模。目前比较常见的 2D 模型是矩形 和圆形3 。 对于两个圆形是否发生重叠, 可 计算两个圆心 之间的距离。 那么条件就变为: 计算两个圆心之间的距离是 否小于两个圆的半径总和。 先写一个碰撞模型的圆形类, 然后在所有需要进行游戏 碰撞检测的 对象 中加入该 模型 ,并进行 该模 型圆的 初始化 , 之后每次该对象发生变化, 就要更新该模型圆的状态, 判断 碰撞检测才能准确。 关键代码如下: public static boolean i
13、sCircleIntersec- tion(DetermineRound dr1,DetermineRound dr2) / 判断两 圆是否发生碰撞,dr1 指第一个圆,dr2 指第二个圆。 float w=Math.abs(dr1.getX()-dr2.getX(); float h=Math.abs(dr1.getY()-dr2.getY(); float r=dr1.getR()+dr2.getR(); if(w*w+h*h)aimX) xSpeed=-xSpeed; if(startYaimY) ySpeed=-ySpeed; Microcomputer Applications Vo
14、l. 30, No.6, 2014 研究 与设计 微型电 脑应用 2014 年第 30 卷第 6 期 15 3.4 后期处理 (1)代码优化 本游戏开发 中用 到的代码 优化 如下: 使用 静态方法 , 在游戏中的 生成 随机数和 碰撞 检测方法 中使 用到静 态方法 。 用乘法代替除法, 由于乘法运算比除法运算快, 所以能够 用乘法运算的地方尽量使用乘法运算, 在游戏中计算位置的 地方常使用。 直接调用成员, 在访问类成员时, 习惯通过 getter 和 setter 方法来访问, 是一个良好的习惯。 但是 getter 和 setter 方法在访问成员时比直接访问成员效率低, 如果只 是简
15、单的访问可以直接访问成员而不通过 setter 和 getter 方 法4。比如 for(int i=0;iobject.getCount();i+) , 这里每次 调用 getter 方法会使效率降 低,如果改成 for(int i=0;iobject.count;i+) ,效率就提高了。游戏中遍历对象 数组是常见的操作, 比如遍历敌人子弹数组、 玩家子弹数组 等,直接访问成员可以提高效率。 (2)算法优化 圆形碰撞检测算法中, 主要就是检测两个圆形的圆心距。 而在平面直角坐标系中要计算两个圆形的圆心距离是要进 行一次开根号运算, 但是在内核运算器中进行除法或者开根 号这些操作运算要消耗大量
16、的资源和时间5 ,显然不等式 两边同时平方不会改变不等式的值, 所以改进后可不进行开 根号运算。 (3)资源文件优化 游戏中画面的显示必须使用图片来显示, 之前要先解码 图片,而解码图片是很消耗内存的操作,根据 android 的内 核机制,如果使用 C 语言申 请分配的内存空间无法再使用 Java 操作进行处理,这样会造成很多内存区域变成死内存, 从而导致内存过小程序无法运行, 所以必须对使用的图片资 源进行优化6。优化图片的工具很多,比如 CS Photoshop 等。 (4)游戏数值优化 游戏的另一个细节就是游戏中各种数值的设定, 比如设 定 BOSS 血量 过多, 那么玩家要很久才能消
17、灭 BOSS,这 样 就会让游戏的用户体验下降; 数值还会影响到画面显示, 比 如玩家飞机发射子弹会有一个时间间隔, 如果时间间隔太小 那么后面的 子弹 会覆盖到 前面 的子弹, 如果 攻击间 隔太大 , 子弹又会显得太空旷,让玩家感觉到火力不够强大。 4 总结 本文简要介绍了基本的游戏开发原理, 重点讨论了游戏 功能系统的设计、 游戏的核心算法以及游戏的优化方法。 当 然 , 本飞行 射击 游戏还有 一些 可以继续 优化 和扩展 的地方 , 比如可以增加关卡, 增加游戏的趣味系统, 可以对游戏中内 存资源的使用进行优化, 以提高游戏运行效率和稳定性等。 参考文献: 1 顾聪, 陈益强, 刘军
18、发等. 基于 Android 平台的室内 LBS 系统设计与实现J. 计算机工程与设 计,2012(1):396-401. 2 郝玉龙.Android 程序射击基础M. 北京: 清华大学出 版社,2011 年. 3 吴亚锋,苏亚光.Android 2.0 游戏开发实战宝典M. 北 京: 人民邮电出版社,2010 年. 4 林城.Google Android 2.X 应用 开发实战M. 北京: 清华 大学出版社,2011 年. 5 贾金玲. 计算机组成原理M. 重庆: 重庆大学出版社, 2011 年. 6 李宁.Android 应用开发实战M. 北京: 机械工业出版 社,2012 年. (收稿日
19、期:2014.04.22) (上接第12 页) 3.5 岩性识别标 准图 如图 11 所示: 标准库参数表 选择曲线名称 Fisher判别 系数 不同聚类种类均值 (如果有两类,则有 两个不同的字段来分 别标识) 标准库数据表 标准库数据 ID标识 参数表中的 曲线名称 类别标号图 11 标准库参数实体标准库数据实体 4 总结 通过建立快速测井综合评价系统的数据库, 可以有效的 组织各类测井数据, 使数据格式化、 条理化, 为后续的数据 操作和软件实现奠定了良好的基础。 经过如上的数据库设计, 可以把数据尽可能的按照其所属类别 (数据来源以及数据功 能) 进行划分, 独立的进行存储, 这样既可
20、使访问数据较快, 也可降低数据间的逻辑关系, 使数据间关系明了, 易于维护。 参考文献 1 吕云翔, 王洋, 王昕 鹏. 软件工程实用教程M. 北京: 机械 工业出版社,2010.10. 2 梁道雷, 施国生. 基于本体的 高 校教务 课程关 联模型J. 微型电脑应用,2009,05:41-42+40+5. 3 郭剑毅, 申立 中, 马桂芳, 温琪, 张世 华, 车 文刚. 基于 C/S 与 B/S 的高校 科研管理信息系统的设计与实现J. 计 算机工程与应用,2003,01:212-214. 4 王向阳. 高校实验室信息管理系统设计J. 微型电脑 应用,2013,12:23-26. 5 黄飞江, 边玉敬, 吴海涛, 卢晓春. 基于 C/S 模式 毕业生就 业管理系统的设计与实现,J. 微型电脑应 用,2010,12:53-54+3. 6 王晓莲, 顾娟, 王颖, 张国江. 大庆油田测井数据库系统 设计J. 油气田 地面工程,2007,02:4647. (收稿日期:2014.4.22)