14软件01班android自从第一台计算机研发以来计算机行业得到了迅速的发展成就很多_第1页
14软件01班android自从第一台计算机研发以来计算机行业得到了迅速的发展成就很多_第2页
14软件01班android自从第一台计算机研发以来计算机行业得到了迅速的发展成就很多_第3页
14软件01班android自从第一台计算机研发以来计算机行业得到了迅速的发展成就很多_第4页
14软件01班android自从第一台计算机研发以来计算机行业得到了迅速的发展成就很多_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

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

文档简介

1、摘要自从第一台计算机研发以来,计算机行业得到了迅速的发展,成就了很多优秀的企业,例如国外的 IBM,微软,ARM,苹果等,国内的腾讯,阿里巴巴,等,而引领计算机行业的主要除了硬件的支撑外,就数操作系统了,而操作系统从Dos,UNIX,LINUX Windows 等 PC在逐渐向移动端转变如:从 Linux 到 Android;从Unix 到 IOS;从 Windows 到 Windows phon,,主要还是因为移动端的便携性,轻巧性深受人们的喜爱,就在这样的移动互联网浪潮中,Android 系统更是高达移动端操作系统80%的占有率,真可谓前景无限,而在 Android的应用中业务又占着最大的

2、比例,所以本次选题为基于 Android 的飞机大战,其主要目的研究移动互联网的发展趋势,对其未来的发展有深刻清晰的认识。本主要阐述以面象的程序开发语言 Java 及 Eclipse 为开发工具,而基于智能Android 系统之上的飞机大战。首先简要介绍课题的研究背景、目的及意义,Android 的发展历程、当前国内外的发展现状。然后介绍了 Android开发环境及环境搭建,最后讲述了基于 Android 飞机大战功能的实现。其功能模块如下:提供敌机的类模块,提供的类模块,主界面模块,天空背景模块,检测与敌机碰撞模块,检测,敌机与我拥有的碰撞木块等,除此以外还为用户提供更加人性化的设计和方便的

3、操作流程。由于 Android 逐渐成为智能技术的主导,相信其基于Android 的飞机大战将会受到更大的欢迎。关键字: 安卓,飞行射击,飞机目录摘要I1 绪论11.11.21.31.4系统研究的背景及意义1国内外的发展现状1主要研究的内容2本文的组织结构21.4.11.4.21.4.31.4.41.4.51.4.6绪论2需求分析和技术介绍3系统概要设计3系统功能的实现3系统测试3总结31.5本章小结32用户需求分析5系统的架构描述5友好的用户界面6技术选型7系统的开发环境82.5和工具简介8ent8ADT 与 SDK8Activity9Eclipse 与 JDK9SurfaceView92.

4、5.12.5.22.5.32.5.42.5.52.6 本章小节9系统概要设计1133.1模块的划分113.1.13.1.2模块设计11功能模块113.2主界面设计13开始退出. 13. 143.33.4界面设计14系统包及其资源规划143.4.1 系统包管理143.4.2数据库153.4.3 Runable 接口以及与 Thread 的区别163.5 本章小结20系统功能的实现2144.1主界面的功能实现214.1.1 主界面布局文件224.1.2ent 对象介绍224.2界面的功能实现244.2.14.2.24.2.3getter 和 setter 方法26getter 和 setter 方

5、法的应用27创建系统各组件274.34.4类的设计35敌机类的设计364.5 本章小结37系统测试3955.15.25.3测试的概念39系统的功能和安全测试39测试总结426总结43参考文献45致 谢471 绪论1.1 系统研究的背景及意义在的早期,大多数开发者都是想要玩转设备、学习技巧和快速攻关狂热分子。但是,随着的开发者加入这个行业,已经进化成涉及到专业设计师、构造师、开发者、产品经销商、和艺术家在内的主导产品。这是行业成必然趋势。尽管在的业余时间内要开发和推销简单的更加,但是的专业商店将为许多人提供的就业机会。的种类,玩家的心理,未来移动通信服务终端的发展,3G从的网络对的影响,还有从

6、J2ME开发介绍机的趋势和未来这种的运营模式,这几方面的内容来看,是未来发展的趋势,其移动性、互连性,必定会带来的风暴,这就使对这一个新兴的领域有了一定的概念,对指导建立一个开发培训的知识结构有一定的帮助,也是的一个发展契机。本文基于 Android 系统设计一种轻松休闲的,让用户可以使用轻松娱乐,因此项目研究和开发具有重要的实际应用价值。1.2 国内外的发展现状(Mobile Game 或 Wireless Game),是指消费者利用随身携带并具有无线网络联机功能的智能移动终端设备,能随时随地来进行的。最大的特点是其随时随地进行的便利性。这些年来,市场有了很大的发展,已成为使用率最高机应用,

7、占到各种应用比例的 78.4%。在,市场经历多年的稳定增长,市场规模已经超过了 850 亿日元1。在,游戏作为用户最喜欢的移动应用之一,在和 Android 等智能终端推出后发展迅速。而,根据易观产业数据库发布的2010 年第 4 季度中国手机市场季度监测数据显示,我国 2010 年市场规模已达到 32.9 亿元,继续保持了较快的发展。2011 年以来 Android 实现了计算机诞生以来最快速度的增长,目前 Android 以每天85 万新增激活数的速度快速征服世界,成为世界范围内占有率最高的智能操作系统。根据 comScore 的统计,2012 年第一季度 Android 在的市场占有率又

8、增长了 3.7%达到 51%;而根据赛诺的调研,Android 系统的市场份额高达 74.7%,而Android在诞生之处就被很多人看好,便宜的价格,小巧的外观,资源丰富,相对于传统主机来说,这些都是 Android机的优点,于是一批 Android陆续出现了,但事实证明 Android并非当初描绘的那样美好,开放的 Android 开发,导致了质量和数量不那么尽如人意,所以在的设计与研发过的质量关一定要把好。1.3 主要研究的内容本设计项目主要完成一种基于 Android 开发的一款。项目研究和设计遵循工程的方法,从需求分析,系统分析,概要设计,详细设计,编码调试,到验证测试,完成本整个过程

9、的设计开发。项目研究和设计的具体任务包括:(1)加深面象编程,巩固 Java 语言的设计模式,掌握 Android 开发的环境搭建。(2)学习和研究 Android环境和接口的设计。(3)学习和研究 Android多线程。(4)学习和研究 Android 系统中用户界面的动态显示。(5)学习并掌握数据库。(6)学习并掌握 Android下动态开发的重要知识点:SurfaceView。1.4 本文的组织结构1.4.1 绪论本章主要介绍了课题的研究背景,课题研究的目的与意义,以及该项目所在领域国内外发展状况等,最后了本文工作内容及的组织结构。1.4.2需求分析和技术介绍本章主要介绍了本系统的技术构

10、架及课题的需求分析与说明,简单的介绍了项目应用的和开发环境,并了的含义。1.4.3 系统概要设计本章是本文比较重要的章节,详细的划分了整个项目的开发模块,及各个模块的功能设计,最后对整个项目的包结构和项目资源路径做了简单的剖析和介绍。1.4.4 系统功能的实现详细介绍开发流程,从建一个Android 项目开始到最终完成开发的详细过程,介绍怎样检测飞机碰撞事件,怎样动态管理界面,怎样实现飞机飞行的效果。1.4.5 系统测试详细介绍了测试的概念、目的和方法,并介绍如何利用 Android 自带的测试工具了系统测试。1.4.6 总结本章对整个毕业设计进行了全方面的总结,了很多之处,再下次做程序的时候

11、可以改正。1.5 本章小结详细介绍了 Android开发的国内外现状,以及本主要研究的方向和的整体结构,从本章中能够清楚的了解本的整体架构,对以后的各细节描述都有清晰的认识。2 用户需求分析2.1 系统的架构描述本项目主要面向者,要求项目不会占用太大的资源,并能够尽量沿用原有的相对成Java 技术,与 Android 系统进行良好的整合。本设计主要讲述了飞机大战的基本功能和基于 Android的开发、接口的设计方法。设计最终达成了开始、退出等 Android的基本功能。并且系统能够正常运行,各个页面交互性较好。在整个设计中基本运用基础的 Android 进行功能编程,其中主要利用了Surfac

12、eView 实现了动态界面显示,实现了飞机飞行和发射等效果。在系统规划中先后系统功能结构图分析了系统所需的各种数据,详细的展现了系统的各个功能模块并给出了主要功能运行界面图。该目前已有比较完善的管理与使用功能。对学习和工作中的学生和在闲暇时间放松的好。本系统主要采用模型- 视图- 控制器 MVC 架构的设计模式。 MVC 架构是 “M-View-Controller”的缩写,中文翻译为模型-视图-控制器。MVC 应用程序总是由这三个部分组成。Event(事件)导致 Controller 改变M或 View,或者同时改变两者。只要 Controller 改变了 Ms 的数据或者属性,所有依赖的

13、View 都会自动更新。类似的,只要 Controller 改变了 View,View 会从潜在的M中获取数据来刷新自己。整个系统的物理架构如下:界面 SurfaceVIe,模型为常用的飞机类,Controller 为 SurfaceHolder.callback 结构中的回调函数。本系统是应用 Android 平台,Android 是一个移动设备的,由 Linux+Java的开源,提供包括SDK、Key Apps、Middleware、Linux Kernel 四个部分在内的方案。开放了基于 Linux 内核以上的开发工具,从而保证了内容的可移植性和多样性。Android 平台为开发应用程序

14、提供了一套很好的框架,可以在这个的基础上开发不同的应用程序,也可以开发新的组件供应用程序调用。Android 会同一系列应用程序包一起发布,该应用程序括客户端,SMS 短消息程,日历,地图,浏览器,联系人管理程序等。所有的应用程序都是使用 JAVA 语言编写的,本项目也是由 Java 语言编写。开发也可以完全应用程序所使用的 API 框架。该应用程序的架构设计简化了组件的重用。任何一个应用程序都可以发布它的功能块并且任何其它的应用程序都可以使用其所发布的功能块(不过得遵循框架的安全性限制)。同样,该应用程序重用机制也使用户可以方便的替换程序组件。Android 系统架构图如 2.1 图所示。图

15、 2.1 Android 系统架构图2.2 友好的用户界面本是直接面对用户的, 要求能够提供良好的用户接口,易用的人机交互界面。要实现这一点,就要求应该尽量使用用户熟悉的术语和提示消息;针对用户可能出现的使用问题,要提供足够的提醒帮助功能,缩短用户对熟悉的过程。本项目采用 Android,从 Android 的角度分析,Android 的开发概括为两类:一是系统开发,包括底层 Linux 内核的裁剪和扩展、硬件驱动的开发和系统移植等,从业主要在工作在硬件厂商的公司里。二是应用开发,主要包括开发、Android 互联网客户端开发和工具开发。业内Android 系统将成为操作系统领域的“windo

16、ws”。一个好的功能强大系统,必须要进行完善而且全面的系统分析和友好设计。本项目中,之所以能够有计划地进行下去,的确也是缘于良好的系统分析,如若省略这一步直接编程,那难度必然加大,以至于在编程过又不得不回过头来进行系统分析,此时必然拖慢进度,打乱整个系统逻辑,其最终的成品也充满变数。本系统在性能功能上应达到如下需求:(1)操作简单、界面友好: 完全控件式的页面布局。(2)的安全性,正在中对可能发生的突发事件做出处理,例如,来了,或者有信息等。(3)的响应速度要快,保证用户不会应为等待反馈时间过长而放弃本。(4)的可靠性,能够真正的带给者乐趣。(5)在结构上应具有很好的可扩展性,便于将来的功能扩

17、展和。根据以上功能,该系统主要以 Android 为操作用Java 为开发语言,使系统开发更加方便快捷,本,它提供了很大的空间,采的目标即为成功、完整的体现该系统,让客户满意。2.3 技术选型开发过应用了 java 技术和 Android项目整体技术选型是这样的,飞机大战SDK 提供的类库,动态界面采用 SurfaceView 和一些 XMLSurfaceHolder.callback 接口的回调方法。常用的资源文件如文件,控制使用了,和敌机,背景图都通过ps 自己处理,系统开始时就启动新线程,一直运行如下为整体流程图如下图 2.2 所示。,知道用户关闭为止。surfaceCreatedR.j

18、ava回调方法,敌机类文件SurfaceVIew界面SurfaceHolderCallback 接口音效资源文件图 2.2 技术选型模型图2.4 系统的开发环境集成开发环境:Eclipse3.6+JDK6.0+SDK2.1编程语言:Java开发模式:MVC 模式2.5和工具简介2.5.1entent 负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此ent 的描述,负责找到对应的组件,将ent 传递给调用的组件,并完成组件的调用。因此, ent 在这里起着一个中介的作用,专门提供组件互相调用的相关信息,实现调用者与被调用者之间的解耦。2.5.2 ADT 与SDK

19、ADT 为 Android 开发工具(Android Development Tools)简称,是在强大的、集成的环境Eclipse IDE 中构建 Android 应用程序插件。ADT 扩展了Eclipse 的功快速建立新的 Android 项目,创建一个应用程序的用户界面,加上 Android 框架的 API 组件、调试应用程序使用 Android SDK 工具,以便 APK 分发给应用程序。SDK 即SoftwareDevelopment Kit 的缩写,中文即“开发工具包”。广义上指辅助开发某一类的相关文档、范例和工具的集合。它可以简单的为某个程序设计语言提供应用程序接口API 的一些

20、文件,但也可能包括能与某种系统通讯的复杂的硬件。2.5.3 ActivityActivity 是 Android 开发中非常重要的一个基础类。Activity 提供了和用户交互的可视化界面,创建一个 Activity 一般是继承 Activity 类,并覆盖 Activity 的onCreate()方法。资源文件2.5.4 Eclipse 与 JDKEclipse 是一个集成开发环境简称“IDE”,在 Eclipse 环境下开发JAVA 程序可以大大提高效率,它提供的框架和可扩展的插件机制给广大的程序员提供了无限的便捷。JDK(Java Development Kit)是 Sun Micros

21、ystems 针对 Java 开发的产品,JDK 是整个Java 的,包括了 Java 运行环境,Java 工具和 Java 基础的类库。JDK 是学好 Java 的第一步。2.5.5 SurfaceViewSurfaceView 由于可以直接从内存或者 DMA 等硬件接口取得图像数据,因此是个非常重要的绘图容器,这次我就用两篇文章来介绍 SurfaceView 的用法。网上介绍SurfaceView 的用法有很多,写法也层出不同,例如继承 SurfaceView 类,或者继承SurfaceHolder.Callback 类等,这个可以根据功能实际需要自己选择,我这里就直接在普通的用户界面调用

22、SurfaceHolder 的lockCanvas 和unlockCanvasAndt。2.6 本章小节本章主要介绍了本系统的技术构架及在实际开发中的用户需求分析,简单的介绍了项目应用的和开发环境,并介绍了的含义。3 系统概要设计系统的概要设计主要是针对系统的总体功能如何设计,如何划分模块,系统的数据库如何设计进行研究。它为系统的详细设计做铺垫。在系统的设计过起着非常重要的作用。系统设计是信息开发过的另一个重要阶段,在这一阶段中将根据前一阶段逻辑分析的结果,在系统分析的基础上,按照逻辑模型的要求,科学合理地进行新系统的设计。系统设计包含两个方面:首先是总体结构设计,其次是具体物理模型的设计。这

23、个阶段的主要目标是将反映用户信息需求的系统逻辑方案转换成可以实施的基于计算机的物理方案,并为下一阶段的系统实施提供必要的技术资料。3.1 模块的划分本系统整体划分为三个模块,分别为主界面,即 Android登录界面,模块,运行中的界面模块,用来处理用户触摸响应,还有得分统计模块,用来获的分数。3.1.1模块设计用户界面是使用者最直接接触的东西,包括是否能够让客户很轻松、方便的使用,操作响应时间、主机连接时间、综合质量、首页布局质量、首页信息类型等。一般来说,一个界面主要由下面几个:文字图形(3)界面版式Android系统的界面设计也是综合了文字,图形等元素。使每一个功能有文字与的共同描述,达到

24、看图就大概知道此键是什么功能的目的,最终的目的还是为了使用者能够快速上手,不至于因为操作的不得当而放弃此系统。3.1.2功能模块的主要功能模块如图 3.1 所示。飞机大战启动页面内页面结束页面图 3.1 整体结构图(1)启动页面负责运行的主线程,在一个 Android程序开始运行的时候,会单独启动一个Pros。默认的情况下,所有这个程序中的 Activity 或者 Serviervice 和 Activity只是 Android 提供的Components 中的两种,除此之外还有 Content Provider 和BroadcastReceiver)都会跑在这个 Pros。在这么多 Thre

25、ad 当中,有一个 Thread,称之为开始游戏退出游戏重新挑战总分游戏暂停游戏积分退出游戏UI Thread。UI Thread 在 Android 程序运行的时候就被创建,是一个Pros 当中的主线程Mahread,主要是负责控制 UI 界面的显示、更新和控件交互。(2)内页面虽然有的不需要不断的重新绘制屏幕,但是假设你想要的需要不间断的绘制屏幕,这是个简单的概念并且你不需要去关注任何脏标记或者去关注在某些状态已经知道 UI 线程不是一直不间断的运行的,而是在改变的情况下重新绘制屏幕。事件的驱动下有操作系统调度运行的。这就是为什么实例化第二个线程,也就是我们通常说的渲染线程,这个线程是由

26、Graphics 模块所创建,Graphics 模块本身由应用模块在程序启动的时候实例化。渲染线程执行一个无限循环,由于应用程序的生命周期事件,它可能会被暂停或者恢复。作为开发者,你可以通过一个 RenderListerner 将这个线程与图形模块连接起来.在进入这些方法的详解之前,我先给你介绍一些细节:libgdx 使用 OpenGl ES,这个是移动设备上硬件加速图像渲染的工业标准。OpenGL ES同一个叫做 EGL 的东西一起使用,EGL 负责设立一个窗口系统和图像硬件的,它创建一个渲染表面,用户可以添加一个用户界面组件到上面,图形硬件可以不通过使用UI 工具包直接渲染。OpenGL

27、ES 自身额外的添加了一个叫做图形上下文的东西,他用于管理驻留在显存中的图形资源,举个例子:这些资源可以是一个纹理,它从本质上来说就是一张位图,OpenGLES 将其建立在 EGL 的表面和背景,通过图形处理处理器获得高质量的。(3)结束页面告知玩家已经结束,告知玩家这次的得分,有重新开始的按钮,方便玩家再来一次。3.2 主界面设计的主页面设计如图 3.2 所示。飞机大战图 3.2 主界面设计图3.2.1 开始其中一个 Activity,在其调用 SetContentView()时,调用自己定义的界面,该界面使自己通过一个类实现的界面,在该类中继承了 SurfaceView,并实现了Surfa

28、ceHolder.callBack 接口和runnable 接口,在该类的回调函数 surfaceCreated()中启动线程并一直进行直到出现时就关闭该线程。3.2.2 退出当玩时,想休息会或者想退出时点击该按钮,退出3.3界面设计采用分层管理,具体效果如 3.3 图所示。退出开始图 3.3界面图3.4 系统包及其资源规划3.4.1 系统包管理本采用 Eclipse 中开发 Android 项目的默认框架,采用 Eclipse 开发的框架图如图 3.4 结构所示。图 3.4 项目资源包管理3.4.2数据库数据库是一款轻型的数据库,它嵌入在 Android 系统中,由于没有数据库操作的图形界面

29、和客户端,所以只能通过命令进入 Android 系统中,进行数据库的操作。Android 给提供了一系列系统工具可以数据库。Android DebugBridge(ADB)是 Android 的一个通用调试工具,它可以更新设备或模拟器中的代码,可以管理预定端口,可以在设备上运行 S知道Android 是基于Linux 内核,命令它的结构也是采用Linux 文件组织方式,因此它的文件结构需要使用s。就会用sAndroid 应用中的这次来数据库文件。(1)运行cmd,切换到Android-sdk 目录,运行adb.exe,加上参数s,出现#号就代表进入了 s命令模式,注意 adb 要在 Andro

30、id 模拟器运行时才能进入 s。执行如下图 3.5 所示。图 3.5进入 s命令模式(2)s命令记住两个基本命令ls 和 cd,类似 windows 命令提示行中的dir 和 cd,代表列出当前目录下文件列表和进入到指定目录。了解这两个命令之后,就可以找到data/data/项目包名/databases。找到数据库文件,接下来就是使用管理工具来进行3+数据库名就进入了管理模式了。执行过程如下图 3.6 所示。操作了。键入图 3.6进入管理模式3.4.3 Runable 接口以及与Thread 的区别在 java 中可有两种方式实现多线程,一种是继承 Thread 类,一种是实现 Runnabl

31、e接口;Thread 类是在 java.lang 包中定义的。一个类只要继承了 Thread 类同时覆写了本类中的run()方法就可以实现多线程操作了,但是一个类只能继承一个父类,这是此方法的局限。下面看例子:package.thread.demo;class MyThread extends Threadprivate String name;public MyThread(String name) super(); = name;public void run()for(i=0;i10;i+)System.out.prln(线程开始:+,i=+i);package.thread.demo;

32、public class ThreadDemo01 public sic void main(String args) MyThread mt1=new MyThread(线程a);MyThread mt2=new MyThread(线程b);mt1.run();mt2.run();但是,此时结果很有规律,先第一个对象执行,然后第二个对象执行,并没有相互运行。在 JDK 的文档中可以发现,一旦调用 start()方法,则会通过 JVM 找到run()方法。下面启动start()方法启动线程:这样程序可以正常完成交互式运行。那么为什么非要使用 start();方法启动多线程呢?在 JDK 的安装

33、路径下,src.zip 是全部的 java 源程序,通过此代码找到 Thread 中的 start()方法的定义,可以发现此方法中使用了private native void start0();其中native 关键字表示可以调用操作系统的底层函数,那么这样的技术成为 JNI 技术(java Nativeerface) Runnable 接口在实际开发中一个多线程的操作很少使用Thread 类,而是通过 Runnable 接口完成。但是在使用 Runnable 定义的子类中没有 start()方法,只有 Thread 类中才有。此时观察Thread 类,有一个构造方法:public Threa

34、d(Runnable targer)此构造方法接受Runnable的子类实例,也就是说可以通过Thread 类来启动Runnable 实现的多线程。(start()可以协调系统的资源):两种实现方式的区别和联系:在程序开发中只要是多线程肯定以实现Runnable 接口为主,因为实现 Runnable接口相比继承Thread 类有如下好处:避免点继承的局限,一个类可以继承多个接口。publicerface Runnablepublic void run();package.thread.demo;public class ThreadDemo01 public s ic void main(St

35、ring args) MyThread mt1=new MyThread(线程a); MyThread mt2=new MyThread(线程b); mt1.start();mt2.start();适合于资源的共享以卖票程序为例,通过Thread 类完成:package.demo.dff;class MyThread extends Threadprivateticket=10;public void run()for(i=0;i0)System.out.prln(卖票:ticket+this.ticket-);下面通过三个线程对象,同时卖票:package.demo.dff;public c

36、lass ThreadTicket public sic void main(String args) MyThread mt1=new MyThread(); MyThread mt2=new MyThread(); MyThread mt3=new MyThread();mt1.start();/每个线程都各卖了 10 张,共卖了 30mt2.start();/但实际只有 10,每个线程都卖自己的票mt3.start();/没有达到资源共享Runnable 接口和Thread 之间的联系:public class Thread extends Object implements Runna

37、ble发现Thread 类也是Runnable 接口的子类。3.5 本章小结本章详细的划分了整个项目的开发模块,及各个模块的详细设计,最后对整个项目的包结构和项目资源路径做了简单的剖析和介绍。4 系统功能的实现界面是呈现给用户的,一个界面呈现的友会决定用户是否会接受该系统,对于Android 系统而言,界面的友好布局,信息的简单明了都。4.1 主界面的功能实现主界面的设计如下图 4.1 所示:图 4.1系统主界面在工程的 reslayout 目录下,创建了一个名称为”activity_main.xml”的布局文件,该文件主要为生成主界面做配置,其布局文件代码如下:4.1.1 主界面布局文件主界

38、面中有两个按钮分别为开始,退出,其中每个按钮都绑定了一个监视器,当按下该按钮时,该监视器将触发点击事件,其中为开始按钮绑定的监视器如下:protected void onCreate(Bundle savedInstane) super.onCreate(savedInstane);this.requestWindowFeature(Window.FEATURE_NO_TITLE);this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSC

39、REEN);sounds = new GameSoundPool(this);sounds.initGameSound();readyView = new ReadyView(this,sounds);setContentView(readyView);4.1.2ent 对象介绍ent(意图)主要是解决 Android 应用的各项组件之间的通讯。ent 负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此ent 的描述,负责找到对应的组件,将ent 传递给调用的组件,并完成组件的调用。因此, ent 在这里起着一个中介的作用,专门提供组件互相调用的相关信息,实现调

40、用者与被调用者之间的解耦。在一个联系人列表屏幕(假设对应的例如,在一个联系人的应用中,当Activity 为listActivity)上,点击某个联系人后,希望能够跳出此联系人的详细信息屏幕(假设对应的 Activity 为detailActivity)为了实现这个目的,listActivity 需要构造一个ent,这个ent 用于告诉系统,要做“查看”动作,此动作对应的查看对象是“某联系人”,然后调用 startActivity(entent),将构造的ent 传入,系统会根据此ent 中的描述,到 ManiFest 中找到满足此ent 要求的 Activity,系统会调用找到的 Activ

41、ity,即为 detailActivity,最终传入ent,detailActivity 则会根据此ent 中的描述,执行相应的操作。其中startActivity(启动主 Activity。ent)将启动一个新的意图对象,代表一个新的 Activity;在这里将显示界面,显示结束页面和结束界面代码如下/显示的主界面/显示结束的界面public void toEndView(score)if(endView = null)endView = new EndView(this,sounds); endView.setScore(score);setContentView(endView); ma

42、inView = null;/结束public void endGame() if(readyView != null)readyView.setThreadFlag(false);else if(mainView != null) mainView.setThreadFlag(false);else if(endView != null)public void toMainView() if(mainView = null)mainView = new MainView(this,sounds);setContentView(mainView); readyView = null;endVi

43、ew = null;Toast 是一个 View 视图,快速的为用户显示少量的信息。 Toast 在应用程序上浮动显示信息给用户,它不会获得焦点,不影响用户的输入等操作,主要用于 一些帮助 / 提示。Toast 是 Android 中用来显示显示信息的一种机制,和 Dialog 不一样的是,Toast 是没有焦点的,而且Toast 显示的时间有限,过一定的时间就会自动其中finish()方法将关闭当前正在运行的 Activity。4.2界面的功能实现实现的效果如图 4.5 所示。图 4.5运行界面主界面的实现是通过 SurfaceView 实现的,SurfaceView 继承自 View,但它

44、与 View不同?View 是在 UI 的主线更新画面,而SurfaceView 是在一个新线更新画面。不可能写一个方法让主线程自己运动。View 的特性决定了其不适合做动画,因为endView.setThreadFlag(false);this.finish();如果更新画面时间过长,那么主 UI 线程就会被正在画的函数阻塞。所以 Android 中通常用SurfaceView 显示动画效果。在对 SurfaceView 进行操作前 Android 为提供了一个十分好用的接口:SurfaceHolder.Callback 接口。该接口中有三个抽象方法,这三个抽象方法是 SurfaceView

45、的三个生命周期:这个方法被回调,当SurfaceView 界面发生改变时。abstract voidsurfaceCreated(SurfaceHolder holder)这个方法被回调,当SurfaceView 界面被创建时。abstract voidsurfaceDestroyed(SurfaceHolder holder)这个方法被回调,当SurfaceView 界面被销毁时。4.2.1 getter 和setter 方法getter 和setter 方法:在 Java 中,一种简单常用的封装方式是使用getter 和 setter 方法。下面这段代码是一个简单名为Contact 的类的

46、定义:public class Contact public String name;publicage;public String; 该定义使得外部对象能够直接类Contact 的成员变量,如下所示:Contact c = new Contact(); = Alice;c.age = 13;c.= ;用过几次之后,发现 Contact 实际上需要包含多个地址。遗憾的是,当在这个类的实现中增加多个地址时,整个程序中的每个调用 Contact.的地方都需要进行相应的修改。下面这个类的情况与其相反:abstract void surfaceChanged(SurfaceHolder holder,

47、format,w,h)privateage;private String name;4.2.2 getter 和setter 方法的应用在上面这个版本的 Contact 类中,使用了private修饰符,它不允许直接类的成员变量。提供了 public 类型的 getter 方法,使用方使用这些方法来得到所需要的Contact 对象的name、age 和地址。例如,可以将地址保存在对象,正如前一个例子那样,也可以使用 username 和 hostname 组合,只要这种方式对于给定的应用更便捷即可。在类的,成员变量 age 可以是类型或eger 类型。这个版本的 Contact 类可以做到支持

48、多个地址,而不需要对客户端有任何修改。Java 允许,而它和某些语言不同,它不支持对 getter 和 setter 方法中的成员对成员变量直接变量的进行封装。为了防止封装,必须自己定义每个方法。大多数 IDE 会提供代码生成功能,可以快速准确地完成这个功能。通过 getter 和 setter 这种封装方法可以提供灵活性,因为直接的成员变量意味着如果某个成员变量的类型发生变化,则使用该成员变量的所有代码都需要进行修改。public String get() return address;publicgetAge() return age;public String getName() ret

49、urn name;Contact(age, String name, String) this.age = age; = name;this.=;private String;class Contact getter 和setter 方法代表的是一种简单的对象封装机制。一个良好的惯例是建议所有的成员变量都定义为 private 类型或 final 类型。编写良好的 Java 程序会使用 getter 和 setter方法,以及一些其他更复杂的封装方式,从而保证在复杂程序中的灵活性。4.2.3 创建系统各组件创建系统各个组件的代码如下:玩家飞机:package com.exle.object;i

50、mport java.util.ArrayList;import java.util.List;import com.eximport com.exle.factory.GameObjectFactory;le.erfa.IMyPlane;import com.eximport com.exle.mybeatplane.R;le.view.MainView;import android.content.res.Resourimport android.graphics.Bitmap;import android.graphics.BitmapFactory; import android.gr

51、aphics.Canvas;/*玩家飞机的类*/public class MyPlane extends GameObject implements IMyPlaneprivate float middle_x;/ 飞机的中心坐标private float middle_y;privaong startTime;/ 开始的时间privaong endTime; privateprivate Bitmap myplane;private Bitmap myplane2;/ 结束的时间/飞机飞行时的/ 飞机时的privaprivate MainView mainView;的序列ist bullet

52、s;/isChangeBullet;/ 标记更换了private GameObjectFactory factory;public MyPlane(Resourresour) super(resour);/ TODO Auto-generated constructor stubinitBitmap();this.speed = 8;isChangeBullet = false;factory = new GameObjectFactory();bullets = new ArrayList();changeButtle();public void setMainView(MainView m

53、ainView) this.mainView = mainView;/ 设置屏幕宽度和高度Overridepublic void setScreenWH(float screen_width, float screen_height) super.setScreenWH(screen_width, screen_height);object_x = screen_width/2 - object_width/2;object_y = screen_height - object_height;middle_x = object_x + object_width/2;middle_y = obj

54、ect_y + object_height/2;/ 初始化资源的Overridepublic void initBitmap() / TODO Auto-generated method stubmyplane = BitmapFactory.decodeResource(resour, R.drawable.myplane);myplane2 = BitmapFactory.decodeResource(resourobject_width = myplane.getWidth(), R.drawable.myplaneexplo);/ 获得每一帧位图的宽object_height = my

55、plane.getHeight();/ 获得每一帧位图的高 / 对象的绘图方法Overridepublic void drawSelf(Canvas canvas) / TODO Auto-generated method stub if(isAlive)x = () (currentFrame * object_width);/ 获得当前帧相对于位图的X 坐标canvas.save();canvas.clipRect(object_x,object_y,object_x+object_width,object_y+ object_height);canvas.drawBitmap(mypla

56、ne, object_x - x, object_y, pa); canvas.restore();currentFrame+;if (currentFrame = 2) currentFrame = 0;elsex = () (currentFrame * object_width);/ 获得当前帧相对于位图的Y 坐标canvas.save();canvas.clipRect(object_x, object_y, object_x + object_width, object_y+ object_height);canvas.drawBitmap(myplane2, object_x -

57、x, object_y, pa);canvas.restore(); currentFrame+;/ 资源的方法Overridepublic void release() / TODO Auto-generated method stubfor(Bullet obj:bullets)obj.release();if(!myplane.isRecycled() myplane.recycle();if(!myplane2.isRecycled() myplane2.recycle();/发射Overridepublic void shoot(Canvas canvas,List planes)

58、/ TODO Auto-generated method stub/遍历的对象if(obj.isAlive() /是否为存活状态for(EnemyPlane pobj:planes) /遍历敌机对象/ 判断敌机是否被检测碰撞if( pobj.isCanCollide()for(Bullet obj:bullets)if (currentFrame = 2) currentFrame = 1;if(obj.isCollide(GameObject)pobj) / 检查碰撞pobj.attacked(obj.germ();/ 敌机增加if(pobj.isExplo()mainView.addGam

59、eScore(pobj.getScore();/if(pobj instanceof SmallPlane)获得分数mainView.playSound(2);else if(pobj instanceof MiddlePlane)mainView.playSound(3);else if(pobj instanceof BigPlane)mainView.playSound(4);else mainView.playSound(5);break;obj.drawSelf(canvas);/绘制/初始化Overridepublic void initButtle() / TODO Auto-g

60、enerated method stubfor(Bullet obj:bullets)if(!obj.isAlive()obj.initial(0,middle_x, middle_y); break;/更换Override当完成之后,可以通过新的 Activity 查看成绩并返回主界面,该 Activity效果如图 4.6 所示。public void changeButtle() / TODO Auto-generated method stub bullets.clear();if(isChangeBullet)for(i = 0;i 4;i+)MyBullet2 bullet = (M

温馨提示

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

评论

0/150

提交评论