学生姓名 教学院系 专业年级 指导教师 单 位
学 号
计算机科学学院 网络工程2011级 职 称
摘 要
随着互联网技术的发展,移动网络也在不断升级再加上移动设备硬件上的提升使得现在手机的功能越来越强大。手机现在已经不仅仅是简单的发短信、打电话的工具了。大家已经把手机当成了在学习和工作之余的一种必不可少的娱乐工具。而在手机应用中Android手机的是市场额很高,已经占据了整个市场超过50%的比例。而在多个Android的应用程序排行榜中,不管是按照使用人气还是收入,70%以上的应用排行榜榜首都是游戏应用。可见,Android游戏应用已渐渐深入人心。Android 手机游戏应用开发已渐渐占据市场主流。
本论文主要研究了基于2D物理引擎的Android手机游戏的设计和开发,具体是“2D桌球游戏”的设计和开发。在对系统进行详细需求分析的基础上,确定了系统的基本功能要求,对游戏界面的布局、界面的设计、音效设置、桌球的碰撞逻辑、积分排行榜等进行了设计,并最终实现了一款风格简单易操作、
娱乐性强、性能高效稳定的2D桌球游戏,它可以很好地缓冲现如今人们紧张的学习和工作生活,可以让人们在枯燥困乏的时候得到一定的缓解,从而有一种欢快的享受。
关键词:2D物理引擎、Android、游戏、桌球
Abstract
With the continuous upgrading of mobile networks and mobile devices on the hardware of ascension makes the function of the mobile phone is getting stronger and stronger now.Mobile phone has now is not a simple text messaging, phone for tools.You already use cell phones as in learning and work a entertainment tool.While the Android is market in mobile application is very high.In a number of Android applications, no matter in accordance with the usage or popularity, or income, topped the list of more than 70% of the application is a game.It is clear that Android game application has gradually thorough popular feeling.The Android mobile game application development has gradually occupied the market mainstream.
This paper studied the Android mobile game based on 2 d physics engine design
and development of concrete is \"2 d billiards game\".In the system in detail, on the basis of demand analysis, to determine the basic functions of the system requirements, the layout of the game interface, interface design, sound Settings, billiard collision logic, leaderboard has carried on the design, and finally achieved a style simple easy to operate, entertaining, interesting and highly efficient and stable performance of 2 d billiards game, it is a good way to buffer the nowadays people nervous rhythm of life, bring some boring time different and happy to enjoy..
Keyword:2D physics engine;Android games; table tennis
• 目录
1.
绪论........................................................................................................................................... 2 1.1研究背景 ............................................................................................................................ 2 1.2研究的目的和意义 ............................................................................................................. 2 1.3研究现状 ............................................................................................................................ 2 1.4本文的主要研究内容 ......................................................................................................... 2 相关技术说明 ........................................................................................................................... 2 2.1物理引擎 ............................................................................................................................ 2 2.2碰撞检测技术..................................................................................................................... 2 2.3 Eclipse开发环境 ................................................................................................................. 2 2.4Android系统简介 ................................................................................................................ 2 2.5Java技术简介 ...................................................................................................................... 2 2.1Android游戏开发中的多线程技术 .................................................................................... 2 游戏总体设计 ........................................................................................................................... 2 3.1游戏简介及设计目标 ......................................................................................................... 2
2.
3.
3.2功能需求分析..................................................................................................................... 2 3.3游戏的主体流程设 ............................................................................................................. 2 4. 游戏详细设计与实现 ............................................................................................................... 2
4.1游戏总体功能模块设计 ..................................................................................................... 2 4.2UI设计 ................................................................................................................................. 2 4.3安装配置环境..................................................................................................................... 2 4.4功能模块的实现 ................................................................................................................. 2
4.4.1控制调度模块的实现 .............................................................................................. 2 4.4.2逻辑计算模块的实现 .............................................................................................. 2 4.4.3数据存储模块的实现 .............................................................................................. 2 4.4.3游戏界面模块的实现 .............................................................................................. 2 4.4.4声音播放模块的实现 .............................................................................................. 2
5. 游戏的测试和运行 ................................................................................................................... 2
5.1测试的目的......................................................................................................................... 2 5.2测试环境 ............................................................................................................................ 2 5.3测试结果 ............................................................................................................................ 2 6. 结论........................................................................................................................................... 2 致 谢 .................................................................................................................................................. 2 参考文献........................................................................................................................................... 2
• 绪论
1.1研究背景
现如今Android的市场份额占总体智能手机市场份额的50%以上,其发展势头势不可挡。因此越来越多的开发商加入了Android应用的开发行列中 。现在Android的应用程序个数已经超过了25万之多。而且随着越来越多的应用的出现,使得其普遍性越来越高,其发展趋势已经可以和现如今的世界智能手机龙首苹果公司推出的ios系统不相上下。 而在多个Android的应用程序排行榜中,手机游戏应用开发是Android系统最主要的发展方向。
从手机游戏的出现开始就给游戏市场带来了新的活力,其使得娱乐不在受
地点和时间的限制进而成为大众娱乐新的选择。而Android系统具有开源性、开发性、稳定性、低成本的优势,这使得其受到了广大游戏开发者的关注。这也预示着Android手机用户数量的增多是基于Android平台的手机游戏具有巨大的市场潜力。同时移动互联网业界人士对Android手机的未来发展也持有极其乐观的心态,这也正表示Android手机游戏产业的下一个阶段,也将是手机游戏的未来。
而在手机游戏开发中,先进的物理引擎加上独特的创意成了游戏的重中之重。所以,为了实现仿真的滚动、旋转、碰撞、弹跳、效果,就不得不把原本在电脑端的游戏动画引擎植入在手机平台上,比如OpenGL ES游戏动画库、BOX2D物理游戏引擎等。
游戏中并没有所说的“物理效果”,还不是一样可以让人能看到该运动的东西还是在动啊,并非就是很死板地一堆放在那里。要说清楚这个问题,其实也很简单,在以往的游戏中,比如打坏一个油桶,物理引擎就会按照游戏设计者预先设计好的脚本来爆炸,这就是为什么在以往的3D游戏中,那些物体只会按照原定计划做规定动作的原因。
自从游戏中加入了物理引擎后就不一样了,物理引擎完全突破了以往按预定脚本执行的方式,而是要求在3D游戏中的那些物体都要遵行物理参数来运行。这样的好处就是如果你的显卡和处理器足够强大,物理引擎就能模拟真实世界中各种物体运动的规律来运动。不过所谓的“物理引擎”并不是指那些实实在在的物理效果,物理引擎和此前理解的3D游戏引擎类似,是给游戏开发者的一个平台,允许游戏开发人员只用几行代码就能在游戏中加入烟雾等效果,非常方便。
1.2研究的目的和意义
随着移动网络的不断升级以及移动设备硬件上的提升,移动设备的功能越来越完善,移动设备平台也日渐火热。同时,随着网络的不断发达,简单的通讯功能已经无法满足人们对手机的要求,手机游戏成了人们闲暇时间的一种娱乐方式。
而近几年,我国的桌球选手在世界大赛上取得了不俗的成绩,这使得越来越多的人的人关注桌球这项运动,有报道说中国已经有超过2000万的桌球迷,这就使得桌球游戏有了很好的群众基础。“2D桌球”基于2D物理引擎使得其具有较直观、除不能有跳球的效果外和现实桌球的其他物理特征基本相同的特点,所以将会是一款很有趣的手机游戏。
1.3研究现状
手机不在是单纯的通讯工具,它集成了通讯、音乐、电影、社交、游戏娱乐等为一体的便携终端。这些除了通讯功能以外的附加功能,使得手机的人群依赖性越来越高。
而手机游戏作为日常休闲的娱乐活动,经历了电视游戏、电脑单机游戏、电脑网络游戏这几个阶段,现如今,游戏作为一个产业,可以看出游戏市场有着非常庞大的需求。手机游戏的出现,给手机和游戏市场带来了新生力量。而且随着科技网络信息的迅猛发展,现在手就游戏远远不再是一些简陋、规则简单的游戏,已经发展到具有超强娱乐性、极好的用户交互性、高度的仿真性的特点。
2D游戏都是基于2D物理引擎的Android手机游戏。物理引擎是为游戏中各种对象提供的一个动画系统。这就需要依靠游戏开发者来连接和同步物理对象,又称“刚体”游戏对象(比如“精灵”)。之所以称这些物理对象为“刚
体”,是因为物理引擎实现这种动画的方式是——假设它们是僵硬不动的、不可变形的。这种简化可以让物理引擎对大量的物体进行计算。物理引擎的终极目的就是仿真,但是因为现实生活中的例子有时太复杂以至于难以模仿,所以不得不做一些简化。
1.4本文的主要研究内容
本文主要介绍了以Java语言为基础,以eclipse为开发工具,结合Android移动开发平台,并且利用Android提供的SDK,来完成Android平台上“2D桌球”游戏的设计和实现。其次介绍了游戏的总体开发框架和各个模块的详细设计与实现。最后对游戏进行了真机测试而且对测试结果进行了分析,最后对本课题做了总结和展望。
• 相关技术说明
2.1物理引擎
表现游戏中物理世界系统内在规律的发生情况叫做物理引擎。最简单的物理引擎表现在游戏中的无处不在的碰撞中,简单来说,一个游戏中的物体能够在有限的空间中运动就是物理引擎的最基本表现。物理引擎使用对象属性(动量、扭矩或者弹性)来模拟刚体行为,这不仅可以得到更加真实的结果,对于开发人员来说也比编写行为脚本要更加容易掌握。好的物理引擎允许有复杂的机械装置,像球形关节、轮子、气缸或者铰链。有些也支持非刚性体的物理属性,比如流体。物理引擎可以从另外的厂商购买,而一些游戏开发系统具备完整的物理引擎。
经过不断的进化,如今的手机游戏引擎已经发展为由多个子系统共同构成
的复杂系统。从物理引擎、碰撞检测到文件管理、网络特性还有专业的编辑工具和插件。Android平台通过多年的发展,通过植入其他平台优秀的游戏引擎的同时也出现了多款游戏引擎。例如LGame游戏引擎,Rokon游戏引擎(基于OpenGL ES)WiEngine游戏引擎等等。
2.2碰撞检测技术
通常,碰撞检测只发生在游戏中的实体对象的位置发生变化之后。对于移动之后进行的碰撞检测的场合,在程序中一般通过下图这样的流程来处理碰撞。
图2-1 处理碰撞流程图
实体碰撞检测涉及的内容通常包括三个方面:
(1)确定检测对象:游戏在运行中会有很多实体对象,在进行碰撞检测时并不需要对所有的实体对象都检测。所以在碰撞之前必须确定碰撞检测的对象。
(2)检测是否碰撞:在此环节需要考虑游戏本身的戏曲以及平台的性能等
问题,合理的选择检测方法。
(3)处理碰撞:当检测到碰撞发生后,需要根据碰撞的类型进行相应处理。
2.3 Eclipse开发环境
Eclipse是一个开放源代码、基于Java的可扩展开发平台。它只是一个框架和一组服务,用于通过插件组件构建开发环境。可是它附带了一个插件集,目前亦有人通过插件使其作为C++、Python、PHP等其他语言的开发工具。 在Android官网上,推荐使用Eclipse和ADT插件的组合来组合开发Android项目。Android平台为开发者提供了源码开放的软件开发包,它包括了使用Java语言开发Android平台应用的必要工具和组件。在大量插件的相互配合下,完全可以满足从企业级Java应用到手机终端Java应用的开发。
2.4Android系统简介
Android是专门为移动设备开发的平台,其以强大的功能和良好的用户体验迅速发展成当前流行的手机操作系统之一。其中包含操作系统、中间件和核心应用等。其是一个分层系统,同时Android是一个基于Linux内核的交互操作环境,其系统架构图如下:
图2-2 Android系统架构
以下对Android操作系统的各个层进行简介:
Android的应用程序层包括电子邮件客户端、短信、日历、地图等由Java语言编写的应用程序。
应用框架层即就是Android应用程序框架。所有的应用程序都是基于该框架进行开发的一组系统和服务,包括以下:
(1)拥有丰富的和可扩展的视图组件。
(2)用于程序间数据共享或者应用程序内部的共享数据。 (3)用于管理非代码资源的访问通道。
(4)用于应用程序在状态栏显示的自定义警告和通知。 (5)用于管理应用程序的生命周期、提供导航、回退等功能。
库层是位于应用框架层之下的层,主要功能是为应用框架的各个组件提供基本实现的一组C/C++库。
Android Runtime包括了Android核心库以及一个Java虚拟机(Dalvik虚拟机)。
Linux内核位于Android操作系统的最底层,它是硬件层和系统中其他软件之间的抽象。主要是功能是为Android提供核心的系统服务,包括内存管理、安全机制、文件管理、驱动管理、网络管理等。同时,其还负责Dalvik虚拟机的线程管理等功能。
Android系统能在如今的市场上占据重要地位,这与它的五大特性紧密相关。这五大特性分别如下:
(1)开放性:Android平台最大的优势应该是其开放性,这一个部分自然也是源于代码的开源性。因为平台的开发性,无论那个移动终端厂商都能如愿地加入到这个Android联盟中来。这样Android平台就能拥有丰富的开发者资源动力来快速地推进这个平台趋于成熟。另外,Android平台的开发性也有利于其几类来自于消费者和厂商的人气。Android软件资源的免费和种类的丰富吸引着广大消费者
(2)不受运营商的束缚:以前的手机应用总是受到来自运营商的制约,这在欧美地区表现尤为明显,例如能使用那些功能、应接入哪个网络,这些几乎都必须受到运营商的控制。而Android的出现,为用户更加轻松地连接网络创造了可能性,来源语运营商的制约也明显地减少。随着移动通信技术2G、3G的普及、完善和提升,手机随意接入网络的现象已经屡见不鲜了。
(3)丰富的硬件选择:当电脑上的一些软件移植到另一台电脑上时就有可能会出现一些兼容性问题,而这个问题对于Android平台的使用者来说将不复存在。由于Android的开放性特点,众多的Android厂商推出了新颖别致、功能多种多样的产品。然而这些产品外形、功能上的差异,却不影响数据同步和兼容问题。
(4)开发不受任何限制:Android平台并没有给第三方的开发商附加各种条框约束,它提供的是一个十分自由并且很宽泛的环境,这为各种富有创新且风格各异的应用软件的诞生创造了条件。
(5)可以结合Google应用: Google服务包括地图、邮件、搜索等,而Android平台将会无缝的结合这些优秀的服务中。Android市场是谷歌公司为Android平台提供的在线应用商店,Android平台用户可以在该市场中浏览、下载和购买第三方人员开放的应用程序。对于开发者来说,有两种获利的方式:一种方式是销售软件,另一种是加广告,即将自己的软件定为免费软件,通过增加广告链接,依靠点击率获利。
2.5Java技术简介
Java技术是一门程序设计语言,也是一个平台,它基于Java虚拟技术,借助这个东西建立了跨平台的优势。Java语言的出现正是源于对独立于平台语言的需要,即这种语言编写的程序不会因为芯片的变化而无法运行或运行错误。
Java程序设计语言与众不同之处在于:Java程序既是编译型的(转换为一种称为Java字节码的中间语言),又是解释型的(Java 虚拟机JVM对字节码进行解释和运行)。编译只执行一次,而解释在每次程序运行时都会进行。编译后的字节码采用一种针对Java虚拟机优化过的机器码形式;解释器是Java虚拟机的实现。
Java平台是一个纯软件平台,它有三个版本JavaEE,JavaSE,JavaME。 Java开发工具很多,我使用过的有Eclipse以及MyEclipse。Eclipse比较流行,老师上课带我们做也是用的这个软件,各种插件很多,用起来也非常方便。在去青城上实训的时候也用过MyEclipse,当时用MyEclipse主要是来搭建服务器。可见MyEclipse的用处更加广泛,我们在这里只单纯编写Java代码,就用
Eclipse就可以了。市面上的其他工具有NetBeans,JBuilder等,各有优劣。
Android以Java作为编程开发语言,JDK是进行Java开发时必需的开发包。进行开发前首先要建立合适的开发环境,其中基于Java的整合型可扩展平台Eclipse是我们的首选。
由于计算机技术的发展所带来的新应用的出现,Java却越来越流行,这种情况是以往程序设计语言在其生存周期内所不多见的。Java语言之所以这样长盛不衰,是因为其众多的技术特点非常符合现如今的移动应用而且,Sun公司不断推出新的版本来不断的完善Java自身的功能。
2.1Android游戏开发中的多线程技术
线程机制的应用是实现游戏控制的重点,游戏中的刷帧、后台资源的加载以及对各个对象的控制都是需要通过线程来完成的。在开发较为复杂的Android应用程序时,一般都要用到多线程。这样可以更好的完成用户之间交互、模拟同时进行的活动、开发利用多处理器还可以再等待慢的I/O操作时做其他事情。
默认情况下,Android的应用程序用到的各个组件都是在一个进程中进行的,并且由该进程的主线程执行。但是,主线程有时候会忙不过来处理多个组件的工作。这时就需要多线程了,即就是说主线程可以诞生多个子线程来分担其工作。
Android的主线程里有一个消息队列,线程在一个循环中检测是否有新消息来,没有的话,主线程挂起等待。再设计Android应用程序时,一般都把费时的工作交给子进程,子进程再把结果感应给主线程,主线程和子线程之间是通过android.Handler为桥梁的。
• 游戏总体设计
3.1游戏简介及设计目标
2D桌球游戏是一款模拟真实的2D手机游戏,游戏提供了全新的3D模型加2D视角,操作方式简单并且配以真实的物理参数,让玩家可以享乐其中,更可以让新手很快的了解桌球,练习技术。游戏还配有背景音乐。碰撞时也可以发出类似真实的碰撞声音,让玩家可以有一种身临真实桌球旁的感觉。总体上说,其具有娱乐性、趣味性、竞技性最重要的是其具有群众性,任何年龄段的朋友都可以玩。
设计目标:
1)游戏风格统一,界面美观大方,操作简单,操作性高。
2)游戏的倒计时模式和练习模式都能正常运行,并且可以保存每次的分数并且显示在排行榜上。
3)游戏运行安全稳定,可以支持多次运行。
3.2功能需求分析
“2D桌球”游戏界面简洁,操作简单但是具有娱乐性和趣味性。现将其主要功能描述如下:
1)界面显示:整个游戏界面包括关于、帮助、开始游戏、设置和游戏主页面这几个主体界面还包括游戏说明界面、胜利界面、失败界面、排行榜界面,有些界面还需要设计虚拟按钮。
2)音效设计:为了是游戏具有良好的用户体验,需要根据游戏的场景来添加音效,包括背景音乐(为玩家创在良好的氛围)、球碰撞的音效(模拟真实桌球)。
3)游戏模式切换:游戏有倒计时模式和练习模式两种可供玩家选择。
图3-1 功能设计图
3.3游戏的主体流程设
图 3-2 总体流程图
上图是游戏的总体流程图,首先进入的是游戏的加载界面,然后进入欢迎界面再进入菜单界面。在菜单界面有关于、帮助、开始游戏、设置和退出五个
按钮。选择开始游戏后将会进入游戏模式选择界面。选择任意模式后会正式进入游戏。选择倒计时模式,待在规定的时间内除过母球外的其他所有球进入洞后则会跳到游戏胜利界面,随后将自动跳到主菜单界面,可以选择继续开始游戏或者退出游戏;选择练习模式,没有时间规定,待所有除母球外的球进洞则进入胜利界面,不会进入失败界面。完成任意模式后,可以在排行榜中查看当前所有分数排行。
• 游戏详细设计与实现
4.1游戏总体功能模块设计
图4-1 游戏总体功能模块设计图
上图为游戏总体功能模块设计图,各功能模块的详细介绍如下:
1)控制调度模块
其是整个游戏的核心模块,将游戏中的各个模块连接成一个整体,起到整体调度作用。该模块将由Activity_Game类实现,是整个游戏的入口。它是通过Handler机制来完成多线程的通信,从而实现游戏模式的转换,控制各个界面之间的切换。
2)逻辑计算模块
此模块主要实现球与球物理碰撞过程中的计算。包括其中向量的积,模的运算以及球碰撞后速度的衰减运算。
3)数据存储模块
此模块主要用来存储玩家完成后游戏后的分数的统计包括对数据库的查询,得到数据库中的数据以及对产生数据的日期的查询。
4)图形界面模块
主要负责可视化界面的绘制。本游戏中包括:欢迎界面、主菜单界面、关于界面、帮助界面、设置界面、游戏主界面、胜利界面和失败界面。它们分别使用相应的类来实现。这些界面的视图类都需要继承自SurfaceView。
5)声音控制模块
此模块主要负责声音的播放。进入游戏主界面后需要伴随有背景音乐,在游戏不同的情景下还需要实现不同的声音效果,比如球碰撞的声音,球进洞的声音。此模块通过Android提供的SoundPool类和MediaPlayer类实现。
4.2UI设计
在软件设计中包括编码设计和UI(User Interface)设计两种,编码设计经过多年的发展已经趋于规范化和成熟化,但是对于UI设计是最近几年才开始被重视的。如今出现在APP市场中功能类似的软件太多了,所以想要产品被大众选
择就必须注重UI设计。而用户体验和用户交互式是UI设计的核心,其将影响到产品的竞争力和生命,因此我们必须重视UI设计。
本游戏的UI设计主要是从以下4个方面来考虑的:
1)易用性:简约设计可以增强UI 的易用性,可以让用户不在关心那些无关紧要的信息。设计简单,功能齐全且一目了然 ,让用户进入界面后就知道自己想要做什么。
2)交互性:必要的时候要提醒用户相应的信息,真正的实现用户与界面的交互。比如用户完成游戏后需要跳出顺利通过的界面。
3)整体美观性:颜色是UI的重要组成元素。颜色大方让人有好的视觉体验。
总之,UI设计在软件开发中占据着及其重要对的作用,而且越来越被受到重视。下面我就展示几张我的项目的UI界面:
图4-2
图4-3
4.3安装配置环境
1)安装JDK1.6.0,设置path和classpath,如下: ClassPath.;C:\\ProgramFiles\\Java\\jdk1.6.0_05\\lib; C:\\Program Files\\Java\\jdk1.6.0_05\\jre
JAVA_HOME C:\\Program Files\\Java\\jdk1.6.0_05 Path中加入; C:\\Program Files\\Java\\jdk1.6.0_05\\bin 2)安装Eclipse配置workspace。
3)安装Android开发工具ADT,配置环境和模拟器,使用4.2.2当前开发版本。
4.4功能模块的实现
4.4.1控制调度模块的实现
本游戏中,控制调度模块由Activity_Game类来实现,其继承自Activity类而且在游戏中也随时需要其管理。 此类中还包括以下成员变量:
View_Wellcome wellcomeView;// 显示欢迎动画界面
View_MainMenu mainMenuView;// 主菜单界面 View_Help helpView;// 帮助界面 View_About aboutView;// 关于界面 View_Game gameView;// 游戏界面 WinView winView;// 胜利界面 FailView failView;// 失败界面
SoundControlView soundControlView;// 音效控制界面 HighScoreView highScoreView;// 积分榜界面 View_Choice choiceView;
模块中用到了非常重要的Handler机制,其主要负责线程之间的通信,通过接收消息来更新线程中的控件。本游戏中使用Handler类主要实现的是根据接收到的消息做出相应的切换视图操作,从而控制各个视图的Handler机制使得线程间的通信得以传递和处理。在此模块中Handler传递的消息内容被封装在一个Message对象中。这里重点实现了Handler类中的handleMessage()方法,此方法是用来接收和处理消息,接收的参数是Message的一个对象。在这里需要定义Message的what字段,根据接收到的what字段的值来切换到不同的界面,从而实现对整个游戏正常运行的管理。
主要函数介绍:
OnCreat():此函数是Activity的入口函数,在此函数中进行初始化操作,例如设置手机屏幕为横屏、获取手机分辨率、设置初始音量,然后切换到加载界面并启动欢迎动画界面。
toWelcomeView():此函数实现切换到欢迎界面。
sendMessage():此函数向Handler发送信息,在handleMessage方法中获取消息并进行相应处理。
onKeyUp()、onKeyDown():此函数实现监听触控按钮。
4.4.2逻辑计算模块的实现
逻辑计算模块在软件开发中的作用十分关键,此模块主要实现游戏中各个事件的处理。手机游戏程序事件一般包括两类:硬件装置设置产生和游戏程序中内部对象产生(球之间的碰撞)。在游戏中,可以看见对的东西都是对象,它们是游戏中实际运行的实体。只要是对象就需要定义该类对象对应的图片和执行的动作。当指定事件发生时,对象会根据运行逻辑执行相应的动作。在此游戏设计中逻辑计算模块主要实现三大功能:球杆的旋转、球的运动以及球的碰撞检测。以下对其实现过程进行分别描述:
1)球杆旋转的实现
球杆旋转的实现可以是玩家手动移动瞄准线或者球杆,这个可以通过触碰虚拟按钮来选择,还可以通过触碰顺时针和逆时针粗调虚拟按钮来实现。
本游戏中实现了线程类CueAnimateThread,通过rotateLeftSlowly()和rotateRightSlowly()方法来使球杆逆时针和顺时针粗调整,实现球杆角度的旋转。
2)球的运动的实现
下图是球运动的流程图,此其是过程中使用到BallGoThread线程,其是继承自Thread主线程的。其中View_Game gameView是线程是否继续工作的标志。此流程图中最主要的就是对进球是否为白球的判断。如果是白球则需要在
ArrayList 图4-4 球运动流程图 3)碰撞检测的实现 碰撞是由游戏的内部对象产生的。对于动作类游戏来说,碰撞检测技术尤其重要。所以,在此游戏开发中,碰撞检测技术用的是否合理直接影响到了游戏的运行速度和仿真性。手机平台本身就具有有限的硬件资源,过于复杂的碰撞检测技术对手机来说,有很大的挑战。过于简单的碰撞检测方式会出现不合理的碰撞效果,从而影响玩家的兴趣,进而影响到游戏的应用性。在碰撞检测过程中通常会用到三种检测方法:矩形碰撞检测法、圆形碰撞检测法和像素碰撞检测法。 首先要确定检测对象,本游戏中的球与球、球与球台需要碰撞。这里重点讲球与球的碰撞。碰撞检测和物理计算在CollisionUtil类中检测两球是否碰撞的方法为isTwoBallCollided(),两球进行碰撞的物理计算的方法为collisionCalculate()。 在此游戏中,采用的是矩形检测法: public static boolean collisionCalculate(float ballaTempXY[],Ball balla,Ball ballb) { float BAx=ballaTempXY[0]-ballb.getX(); float BAy=ballaTempXY[1]-ballb.getY(); //求上述向量的模 float mvBA=mould(new float[]{BAx,BAy}); //若两球距离大于等于球直径则没有碰撞 if(mvBA>Ball.d){ } return false; 4.4.3数据存储模块的实现 此模块由两部分组成,一部分是常量类Constant,它是来封装游戏中用到的所有常量,包括:屏幕高度、屏幕宽度、球台的宽度、球台的高度、桌球上的坐标等的。其使用initConst()方法来初始化常量。另一部分是打开创建数据库,这部分主要实现排行榜的功能。这个游戏中的数据存储用到的是SQLite数据库SQLite数据库是一个开源的嵌入的数据库,它可以减少应用程序管理数据的开销,很容易使用,可植入性好。使用SQLite数据库前首先要使用openOrCreateDatabase()方法创建数据库,并定义insert、query、close等方法对数据库进行相应的插入、查询、关闭等操作。 4.4.3游戏界面模块的实现 图形的绘制对于游戏来说很重要,游戏的核心是需要不断的绘图。游戏在开始之后是需要根据玩家的选择来给与不同的响应也就是所谓的交互。因此游戏在初始化后,是需要用户一般操作,程序一边按照规则绘制画面的。 在本游戏中,是通过各个界面的视图类来实现的,包括欢迎界面(WelcomeView)、关于界面(AboutView)、游戏主界面(GameView)、失败界面(FailView)和胜利界面(WinView)。这些类都是继承自类(SurfaceView)的。SurfaceView类是一个新起的单独线程,可以重新绘制画面。使用SurfaceView的时候一般要对其进行创建和销毁,改变时还需要进行监听,这就需要用到SurfaceHolder.Callback。下边是以欢迎界面为例来展示SurfaceHolder.Callback接口中实现的方法的部分代码: public class WellcomeView extends SurfaceView implements SurfaceHolder.Callback //实现生命周期回调接口 { public void surfaceCreated(SurfaceHolder holder) {//创建时被调用 } public void surfaceDestroyed(SurfaceHolder arg0) {//销毁时被调用 } } 下面具体来看各个界面的实现: 1)游戏欢迎界面的实现 游戏欢迎界面是由一个动画组成的,这个动画是由两张背景图片中间加时延来实现的。首先结合WellcomeView类里的onDrow()方法来绘制背景图片,然后移动背景图片到位后进行动画延时sleepSpan,然后又使用onDrow()方法来绘制另一张背景图,这样就完成了动画播放。然后就需要使用sendMessage消息来跳转至游戏主菜单界面。在本游戏中所有界面跳转都是用的sendMessage消息来实现。 2)游戏主菜单界面的实现 游戏主菜单界面实现也是通过构造方法进入,添加callback回调接口,此接口调用surfaceCreat、surfaceChanged、surfaceDestory三个方法,在creat方法中进行创建画笔、绘制和计时线程、球列表等,并开启线程,进行界面的绘制工作,其中不管是否调用onDrow()方法,其都会运行。在线程刷新的过程中通过synchronized同步锁调用onDrow()方法对界面进行重新绘制。 此界面实现的另一个主要的方法是onTouchEvent()方法,其是来对菜单项进行动画切换并且进入相应的菜单项。其中动画播放中触控无效。游戏进入主 菜单后,首先需要初始化当前紧靠菜单项的位置大小和参数。然后由玩家进行相应触控然后根据不同的触控执行不同的业务逻辑(左滑、右滑或选中菜单项)。在切换的过程中启动ViewDrawThread线程,播放动画。动画总的思想是根据进度百分比计算当前菜单项的位置、大小,并以此来计算出相邻左右两侧的菜单项的位置和大小(非紧邻菜单项的大小是固定的,只需要计算位置)。 3)游戏界面力度条的实现 需要使用单位DrawSelf()方法来绘制进度条,canvas.drawBitMap()来绘制三角指针,changedCurrHeight()方法来增加力度条。在增加力度条前需要先使用isActionOnBar()方法来判断按钮是否有触控事件。 4)其他图形界面的实现 除了游戏中的欢迎界面、菜单界面外的游戏关于界面、失败界面、胜利界面也都是通过其中的onDraw()方法来绘制界面的。 4.4.4声音播放模块的实现 本游戏中的音效分为背景音乐和音效(球碰撞的声音、球进洞的声音)。背景音乐一般要一直播放,而音效是在必要的时候才会发生。 Android平台中关于音频的播放有两种,一种是SoundPool,一种是MediaPlayer。SoundPool只能申请到1M的内存空间,所以只能使用一些很短的声音片段,所以球碰撞和进洞的声音就可以使用SoundPool而游戏的背景音乐就只能使用MediaPlayer。其中在使用MediaPlayer时,需要首先使用creat()方法创建MediaPlayer实例,然后才可以调用MediaPlayer类中的方法来播放音乐。 • 游戏的测试和运行 5.1测试的目的 当游戏软件完成后,为了验证游戏是否存在缺陷、能否达到预期的设计目的,我们需要在模拟器或者手机上调试和运行,以发现其不足,进而完善其功能提高产品的质量。 5.2测试环境 本游戏的测试包括两种,一种是在模拟器上,一种是将运行后生成的apk文件导入手机上并进行安装。本人测试时使用的是华为T8830,主要参数为:主屏尺寸:4英寸,主屏颜色:彩屏,主屏像素:480*800像素,内存容量:1GB,系统平台:Android5.0。 5.3测试结果 安装好apk文件后,在手机的主菜单里就可以 显示本游戏的icon图标,如图所示。 图5-1 Android手机主菜单截屏 点击icon图标,接下来讲进入游戏启动界面,并相继进入欢迎界面和菜单界面。 图5-2 游戏启动界面截屏 图5-3 游戏欢迎界面截屏 图5-4 游戏主菜单界面截屏 点击开始游戏按钮,进入游戏模式选择界面。 图5-5 游戏模式选择界面截屏 图5-6 倒计时模式界面截屏 图5-7 练习模式界面截屏 在游戏任意模式,玩家可以通过手动直接调节或者通过左右的虚拟粗调按钮来控制球杆的方向,其中左为逆时针,右为顺时针。在玩家通过手动直接调节时,可以通过目标杆转换按钮来转换,默认是调节球杆对准线,按下按钮是 调节球杆。当玩家对准杆和球的位置后可以通过右边的力度条来选择杆对母球的速度,使得球的走位更精准,待这一切选择好后,点击GO按钮,击球,然后求杆会隐藏。待所有碰撞完成后,球杆复位。玩家可以继续下次击球。 图5-8 排行榜界面截屏 在游戏主界面可以通过左右滑动分别进入关于、版帮助、设置等界面,进入退出界面后点击退出按钮直接退出游戏回到手机的主菜单界面。 图5-9 关于界面截屏 图5-10 点击关于按钮后的界面截屏 图5-11 帮助界面截屏 图5-12 点击帮助按钮后的界面截屏 帮助界面是介绍游戏主界面的各个对象,让玩家了解游戏。 图5-13 设置的界面截屏 图5-14 点击设置按钮后的界面截屏 设置界面是来用来设置背景音乐和音效的,创造良好的玩游戏氛围,使得游戏能能给人带来愉悦感。 图5-15 退出界面截屏 图5-16 游戏胜利界面截屏 当玩家选择倒计时模式并且在规定时间内将除白球外的其他球都打进洞并且比排行榜中的其他人用时短,游戏就会出现上图界面,随后自动跳转至开始游戏界面。 图5-17 游戏失败界面截屏 当玩家选择倒计时模式但是没有在规定时间内将除白球外的其他球都打进洞,则出现上图界面。 • 结论 本论文主要介绍了Android的相关知识,包括其发展现状Android操作系统的架构等。还研究了安卓游戏开发的目的意义、前景还有手机游戏开发的关键技术碰撞检测技术。本论文,还展示了2D桌球游戏的总体设计、详细设计以及实现,并最终完成了测试。 本游戏能够实现两种游戏模式,练习模式和倒计时模式,并且可以存储倒计时模式时的分数记录并将其排名(按照分数从高到低)。游戏界面简单易操作,但趣味性十足,可以初学玩家和经验十足的玩家都能有兴趣玩。总体来说这是一款可以给忙碌工作和学习的人们减少压力的游戏。 虽然游戏在开发的过程中已经进行了很多优化,但是还是存在一些问题。主要有以下方面: (1)游戏技术上的改进: 在碰撞发生的时候不能像真实的桌球那样逼真,当然这取决于现在的碰撞检测技术。而且游戏的仿真性绝对也是现如今游戏发展的一个重要方向。 (2)游戏界面的改进: 在游戏的任一两种模式的主界面中,应该添加暂停游戏和继续游戏的按钮设置,并对其进行附加提示,这样可以让玩家有更好的用户体验。 (3)游戏交互的改进: 当玩家在游戏主菜单时,可以通过左右滑动来进入应的界面,再进行点击对应的按钮才能真正进入界面,这个交互明显比较繁琐。另外当用户滑到“退出”页面时,直接就退出游戏回到手机菜单界面,这里需要添加一个附加提示,然后经玩家选择后再退出。 (4)游戏的进一步优化: 虽然游戏已经进行了多次优化,但是在有的手机上运行速度很慢,会出现闪退的现象,因此需要再对其进行优化使得游戏运行起来更加顺畅。 总之,在整个毕业设计过程中我学到了很多知识,对安卓有了更深入的了解并且掌握了很多安卓游戏开发过程中的技术。比如游戏开发中的多线程技术,图形处理技术、碰撞检测技术等。但是这些都是技术性的,除此之外我掌握了一点更重要的东西,就是合理的利用现有资源,比如图书馆、网络。同事,还需要和同学老师进行研究讨论和沟通,这样才能更好的完成整个过程。 致 谢 在这历时两个月的毕业设计中,通过查找资料、同学探讨最终完成了基于2D物理引擎的Android手机游戏的设计和开发。但是因为时间和技术上的问题,游戏还存在一些不足,但是最终在导师的帮助和指导下,顺利的完成了设计。 首先我要向我的导师赖俊良老师致以衷心的感谢!是因为您细心的指导, 才使得我完成了此次设计。本文从选题、撰写、修改一致到定稿,导师都给了我精心的指导和帮助。在此向老师致以诚挚的感谢。其次要感谢此过程中帮助我的其他老师和同学。他们给了我很多鼓励和关心。还要感谢网络上那些热心人士,他们给我解决了许多技术上的问题。最后还要感谢在百忙中评审论文并提出宝贵意见的各位老师们。 在此对你们致以感谢! 参考文献 [1]Lauren Datcey, Shane Conder. Android Wireless Application Developent.Addison-Wesley Professional,2009.210-123 [2] Karim Yaghmour. Embedded Android. O'Reilly Media, Inc, USA,2013.4 [3] Android 从入门到精通.清华大学出版社,2012.9 [4] 耿祥义,张跃平.Java大学生实用教程学习指导.电子工业出版社,2012.2 [5] 吴亚峰,苏亚光.Android2.0游戏开发实战宝典.人民邮电出版社,2011.1 [6]Vladimir Silva .精通Android游戏开发.人民邮电出版社, 2011.2 [7]李梦伟,何晨光,李洪刚.Android编程入门经典.清华大学出版社,2012 [8]柯元旦,宋锐.Android程序设计.北京航空航天大学出版社,2010 [9]邹建飞.J2ME开发精解.北京:电子工业出版社,2006.162-188 [10]赵剑平等.手机游戏设计教程.北京:清华大学出版社,2007.11-87 [11]姚昱旻,刘卫国.Android的架构与应用开发研究[J].计算机系统应用,2008, [12] 李刚. 疯狂Android讲义[M]. 电子工业出版社, 2011. [13]郭志红.Android应用开发详解[M].电子工业出版社,2010. [14]杨丰盛.Android应用开发解密[M].机械工业出版社,2010. [15]田俊静,张波,黄湘情.Android基础教程(第三版)[M].人民邮电出版社,2010. 因篇幅问题不能全部显示,请点此查看更多更全内容