基于Android的飞机大战游戏设计与开发_第1页
基于Android的飞机大战游戏设计与开发_第2页
基于Android的飞机大战游戏设计与开发_第3页
基于Android的飞机大战游戏设计与开发_第4页
基于Android的飞机大战游戏设计与开发_第5页
已阅读5页,还剩57页未读 继续免费阅读

下载本文档

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

文档简介

1、LUOYANG NORMAL UNIVERSITY2013届本科毕业设计基于An droid的飞机大战游戏设计与开发院(系)名称信息技术学院专业名称软件工程学生姓名学号指导教师XXX副教授宀兀成时间2013年5月基于Android的飞机大战游戏设计与开发 I基于Android的飞机大战游戏设计与开发 #摘要相信An droid (安卓)已经为人们熟知,经过 2011年的洗礼,An droid智能手 机火速上位,甚至说现在手机系统由IOS和An droid平分也不为过。随着 An droid 智能手机在中国内地的风靡,基于An droid平台的应用开发也逐渐成为IT开发的一大热门。游戏是智能机不

2、可或缺的应用之一,“水果忍者”、“愤怒的小鸟”等 An droid游戏应用的成功,让人看到手机游戏在 An droid平台上的巨大发展空间。 基于此,采用Eclipse和An droid ADT作为集成开发平台,开发本 An droid游戏 APR本应用为An droid飞机大战游戏,主要有6个操作界面分别为开始界面,游戏 界面,设置界面,得分界面,Win界面,Lose界面。玩家可以选择自己进入设置界面对游戏进行设置,或进入的分界面查看自己本次操作是否在前六名等操作。作为 游戏背景音乐的存在是不可或缺的,本应用在不同的操作界面演奏不同的背景音 乐,玩家还可以在设置界面设置背景音乐的大小。由于A

3、n droid控件Activity 的生命周期的特点,本应用会在被点击“ EXIT”按钮的Activity 中发送一个EXIT的 广播,所有的本应用的 Activity收到广播后会自动结束,使得本应用能够完全的退出系统。本应用采用An droid的SurfaceView绘制游戏界面,游戏的主界面美观, 赏心悦目,以提高玩家对游戏的兴趣。游戏的控制模块应该做到易懂、易操作,以 给玩家一个很好的游戏环境。关键词:An droid开发;手机游戏;Java; SQLite洛阳师范学院2013届本科生毕业设计 #洛阳师范学院2013届本科生毕业设计 IIAbstractAn droid has bee

4、n known for people, after 2011 years of baptism, An droid smartph one develop ing fast . An droid occupies a large share in the market . An droid game applicati on is successful, it make a pers on see that mobile games on the An droid platform of the huge developme nt space. Based on this,we using E

5、clipse and An droid ADT as in tegrated developme nt platform, to develop the An droid game applicati on.This applicati on for An droid pla ne war games in clude six operati ng in terface, respectively as the start scree n, the game in terface and set in terface, Win in terface, Lose in terface. Play

6、ers can choose in terface to play the game. As the mobile phone game background music is indispensable, the application play different background music in differe nt in terface, players can also set the size of the backgro und music in sett ing in terface.This applicati on using the An droid Surface

7、View to draw game in terface, game in terface pleas ing to the eye by people to play. I n order to give players a good game en vir onment , the con trol module of game should be simple, easy to operate.Keywords : An droid Program ing; Mobile Phone Games ; Java Programi ng ;SQLite基于Android的飞机大战游戏设计与开

8、发iii基于Android的飞机大战游戏设计与开发iii TOC o 1-5 h z HYPERLINK l bookmark4 o Current Document 第1章绪论 1 HYPERLINK l bookmark6 o Current Document 1.1系统开发背景 11.2系统研究目的和意义 1 HYPERLINK l bookmark8 o Current Document 1.3可行性分析 1 HYPERLINK l bookmark10 o Current Document 第2章系统需求分析 2 HYPERLINK l bookmark12 o Current Do

9、cument 2.1用户功能需求分析 2 HYPERLINK l bookmark14 o Current Document 2.2系统性能要求 3 HYPERLINK l bookmark16 o Current Document 2.3业务流程分析 3 HYPERLINK l bookmark18 o Current Document 第3章系统总体设计 4 HYPERLINK l bookmark20 o Current Document 3.1系统功能模块分析 4 HYPERLINK l bookmark22 o Current Document 3.1.1系统管理 4 HYPERLI

10、NK l bookmark24 o Current Document 3.1.2 APP应用设置 4 HYPERLINK l bookmark26 o Current Document 3.1.3玩家信息管理 4 HYPERLINK l bookmark28 o Current Document 3.2系统类关系图 4 HYPERLINK l bookmark32 o Current Document 3.3系统总体设计 6 HYPERLINK l bookmark34 o Current Document 第4章系统详细设计 8 HYPERLINK l bookmark36 o Curren

11、t Document 4.1开发工具简介 8 HYPERLINK l bookmark38 o Current Document 4.2数据库设计 8 HYPERLINK l bookmark42 o Current Document DAO(数据库访问对象) 9 HYPERLINK l bookmark50 o Current Document SQLite 数据库 12 HYPERLINK l bookmark52 o Current Document 4.3游戏界面设计 12 HYPERLINK l bookmark54 o Current Document 4.3.1开始界面 12 H

12、YPERLINK l bookmark114 o Current Document 4.3.2游戏界面 19 HYPERLINK l bookmark184 o Current Document 4.3.3设置界面 27 HYPERLINK l bookmark202 o Current Document 得分界面 35 HYPERLINK l bookmark212 o Current Document Win 界面 41 HYPERLINK l bookmark228 o Current Document Lose 界面 47 HYPERLINK l bookmark232 o Curre

13、nt Document 第5章软件测试和调试 52 HYPERLINK l bookmark234 o Current Document 5.1白盒测试法 52 HYPERLINK l bookmark236 o Current Document 5.2黑盒测试法 53 HYPERLINK l bookmark238 o Current Document 第6章工作总结和展望 54 HYPERLINK l bookmark240 o Current Document 参考文献 55致谢 56基于Android的飞机大战游戏设计与开发 洛阳师范学院2013届本科生毕业设计 基于Android的飞

14、机大战游戏设计与开发 第1章绪论1.1系统开发背景随着科技的发展,现在手机的功能已不仅仅是简单的接打电话、收发短信了。 更多的手机用户希望在工作、学习之余通过方便灵巧可随身携带的仪器休闲娱乐。 因此,为了迎合众多用户的需求并适应现在手机的规模,我们开发出一套适合各阶 层人士的具有很强的娱乐性和交互性的飞机小游戏。虽然现在市面上存在着各种各样的游戏版本,可是飞机游戏其市场还是相当大 的。因为它的特殊在于人们在玩游戏的时候的过程中使爱不释手。随着游戏关卡不 断提高,其难度也更大,刺激性也更强。可以说该游戏的优势在于它的简单易行, 不论是手机,还是小游戏机,都能很快顺利的运行。对于在外忙碌的人,不可

15、能花 费大量时间在娱乐上,大型游戏是行不通的。这样的小游戏刚好迎合了他们的需求。 1.2系统研究目的和意义在如今社会,人们的工作学习压力逐渐增大,生活节奏逐渐加快,大多数人没 有足够的时间去休闲娱乐,放松自己。这款小型的手机游戏,可以让我们随时随地 都能享受游戏,从繁重的日常生活中解脱出来。游戏的主界面应该力求美观,赏心悦目,以提高玩家对游戏的兴趣。游戏的控 制模块应该做到易懂、易操作,以给玩家一个很好的游戏环境。1.3可行性分析该系统采用Eclipse集成An droid ADT为开发平台进行APP开发。Eclipse是 一个开放的源代码的、基于 Java的可扩展开发平台。就其本身而言,它只

16、是一个 框架和一组服务,用于通过插件组件构建开发环境。虽然大都数用户很乐于Eclipse 当作Java集成开发环境(IDE)来使用,但Eclipse的目标却不仅限于此。Eclipse 还包括插件开发环境,这个组件主要针对希望扩展Eclipse的软件开发人员,因为它允许他们构建与Eclipse环境无缝集成的工具。由于Eclipse中的每样东西都是 插件,对于Eclipse中的每样东西都是插件,对于给 Eclipse提供插件,以及给用 户提供一致和统一的集成开发环境而言,所有工具开发人员都具有同等的发挥场 所。基于Eclipse的应用程序的插件开发诸如 Siemens公司的PLM产品Teamcen

17、ter 的插件级开发。An droid 专门针对 Eclipse 开发做了 ADT(A ndroid Developer Tools)开发插件,因此该应用使用Eclipse开发完全可行第2章系统需求分析2.1用户功能需求分析由于本程序简单易操作,交互性好,对用户没什么特别要求。一般用户经过几分钟练 系都可以熟悉本游戏的规则。图2-1功能界面示例图分数:12IHP:图2-2游戏界面示例图2.2系统性能要求实时性本应用为手机游戏因此对于用户的操作必须做出立即响应,否则本游戏即为失败。易操作性单机手机游戏的最大特点即为易操作性,用户在不看说明的情况下也能够玩,并且在 玩过几遍之后即熟悉本游戏的规则。

18、这是本应用对于操作性的要求。2.3业务流程分析依据系统的需求分析,得到系统的流程图如图2-3所示:图2-3系统流程图第3章系统总体设计3.1系统功能模块分析当前应用使用的SurfaceView来绘制 的页面因 此相对来 说大部 分逻辑都是由Activity 来做处理的。本系统的功能模块也根据Activity的不同来划分成6个功能模块。3.1.1系统管理各个操作界面布局适当,颜色搭配等要美观。各个Activity之间的切换要快速(PS:它们各自的背景音乐也要随之切换,给用户以顺畅、自然的感觉)。用户在任何一个 Activity点击“ EXIT”按钮或ContextMenu中的“退出”都要成功的将

19、当前应用挂起的多个Acitivity 和当前An droid虚拟机显示的Activity 顺利的停止,并销毁。APP应用设置设置应用系统背景音乐声音大小和游戏难度。使用SeekBar来控制系统音量,使用 RadioGroup来控制飞机难度。3.1.3玩家信息管理在游戏结束时对于玩家的名称和得分进行记录,并在玩家查看排名情况时,以倒序形式显示前六名玩家的得分和姓名等信息。3.2系统类关系图系统实体类、边界类、控制类之间的关系如图3-1所示:Manage 控養+ &ryG&rne0ijllet$M3nsg&f+ Bullet+ Plane+ Sr/GsmfeCataAsss-FfelpfeT +

20、SyG a m & Dra w&r+ SkyGameErfemyFlaneFI a neger+ SkyGh m e S ci&= n R 11 Vn = w+ Sky G a me StartVi eactivity边畀斟+ Ge m&OverF a i I ureAct i ty+ Gh m e Ov& rSu oo&ssActi vi ty+ S-/GamEOptiQnSuttDnOrtClicxAGtivit-+ SkyGameSooteSunonOnCliotActivity+ Sky GHmeSoren Roll Activity+ SJy G a me StartActi v i

21、 t图3-1实体类、控制类、边界类之间的关系各个界面类之间的关系如图3-2所示:图3-2 APP边界类关系3.3系统总体设计系统的中只有玩家一种用户,不必向其他的网站或者是教务系统一样进行身份验证等操作。玩家点击应用图标直接进入应用的开始界面。用户的操作总体可以归并成如3-3玩家用例图所显示的内容,子弹的用例图如图3-4所示,飞机的用例图如图3-5所示。用户的操作基本可以划分为“开始游戏”,“设置游戏”,“玩游戏”,“查看分 数”,“退出游戏”这五个用例。图3-3玩家用例图图3-4子弹用例图图3-5 飞机用例图第4章系统详细设计4.1开发工具简介An droid开发工具(ADT)是一个插件的E

22、clipse IDE,目的是给开发人员提供一个强大 的、集成的环境中构建 An droid应用程序。扩展能力的Eclipse ADT让你迅速建立新的An droid项目,创建一个应用程序的用户 界面,添加基于安卓框架的API,调试您的应用程序使用 An droid SDK工具,生成apk文件 在使用Eclipse运行An droid应用的时候Eclipse会自动的将生成的apk文件自动的注册 到An droid虚拟机中。在Eclipse ADT发展与高度推荐,是一种最快的方式开始。与引导项目设置它提供 ,以 及工具集成、定制XML编辑器和调试输出窗格,ADT给了你极大的提高在发展中 An dr

23、oid 应用程序。使用Eclipse 集成An droid ADT 做An droid应用开发是目前企业中常用的 An droid 应用开发方式。本项目在开发环境:JDK 1.7Eclipse 3.7.0An droid ADT4.034.2数据库设计本应用使用的是An droid虚拟机做开发,因此使用的为An droid虚拟机中自带的数据 库SQLite。本应用只是在针对用户得分及用户姓名等基本信息进行存储,因此数据库非 常简单,仅仅是设计了一个用来存储用户排名信息的表结构。用来存储用户基本信息的 compositor_table 的字段信息如图4-1所示。CREATE TABLE comp

24、ositor_table(id INTEGER PRIMARY KEY,n ame VARCHAR(40) NOT NULL,score INTEGER NOT NULL)c om pos itortab-l e4rcolumnid: INTEGERname: VARCHAR40)score: INTEGER图 4-1 compositor 表An droid中自带的SQLiteOpe nHelper作用:一个帮助类,帮助创建数据库和数据库 版本管理。本应用直接创建一个 SkyGameDataBaseHelper类继承An droid自带的数据库操作类 SQLiteOpenHelper。在 o

25、nCreate()方法中创建表 compositor_table 。public void on Create(SQLiteDatabase db) / TODO Auto-ge nerated method stubString create_table =this.c on text.getResources().getStri ng(R.stri ngsreate_compos_tabie;/ CREATE TABLE compositor_table (id INTEGER PRIMARY KEY, nameVARCHAR(40) NOT NULL,score INTEGER NOT

26、NULL); db.execSQL(create_table);DAO(数据库访问对象)本应用中的数据库访问对象 SkyGameDataBaseDa采用了单例模式,以保证当前应用 中只存在一个DAO数据库访问对象。使用了最简单的单例,并未从线程安全的角度进行进 一步的限制,原因在于考虑到当前应用中只有3个Activity 使用了 DAO由图4-2可知Activity 之间的切换类似于进程对于CPL的占用一样,当前显示在界面上的Activity 是 活动状态而其他Activity则是挂起状态,因此不必担心它们的线程同时去创建DAO寸象以引起当前系统中多个DAO寸象的状况。public class

27、 SkyGameDataBaseDao private static SkyGameDataBaseDadnsta nee = n ull;private SQLiteDatabase database = n ull;private Con text con text = nu II;private SkyGameDataBaseHelper helper = n ull;public static SkyGameDataBaseDao getl nsta nee (Con text con text)if(in sta nee = nu ll)in sta nee = new SkyGam

28、eDataBaseDao(c on text);retur n in sta nee;private SkyGameDataBaseDao(C on text con text)this.e on text = con text;helper = new SkyGameDataBaseHelper(c on text,1);while(this.database = helper.getWritableDatabase()=nu II);public void in sertPlayer(SkyGamePlayer player)Stri ng sql = con text.getResour

29、ces().getStri ng(R.stri ngompos_tabie;Conten tValues values = new Con te ntValues(); values.put(score,player.getScore();values.put(”name, player.getName();if(!this.database.isOpe n()this.helper.o nOpe n(this.database);try this.database.begi nTran sactio n();this.database.i nsert(sql, nu II, values);

30、 this.database.setTra nsactio nSuccessful(); catch (Excepti on e) / TODO Auto-ge nerated catch blocke.pri ntStackTrace();fin allythis.database.e ndTra nsacti on();public ArrayList getPlayers()ArrayList players = new ArrayList();String sql =con text.getResources().getStri ng(R.stri ngielect_form_comp

31、os_table_cour)tCursor cursor = database.rawQuery(sql, n ull); cursor.moveToFirst();if(cursor.getCou nt() 0)int count = 0;coun t+;players.add(new SkyGamePlayer(count,cursor.getString(1),cursor.getInt(2); while(cursor.moveToNext()count +;players.add( newSkyGamePlayer(cou nt,cursor.getStri ng(1),cursor

32、.getI nt(2);return players;public void delete()Stri ng sql = con text.getResources().getStri ng(R.stri ngjelete_from_compos_tabie; if(!this.database.isOpe n()this.helper.o nOpe n( this.database);try this.database.begi nTran sacti on();this.database.execSQL(sql);this.database.setTra nsactio nSuccessf

33、ul(); catch (SQLExcepti on e) / TODO Auto-ge nerated catch blocke.pri ntStackTrace();fin allythis.database.e ndTra nsacti on();public void close()if(this.database.isOpe n()this.database.close();图4-2An droid 中Activity生命周期状态图SQLite 数据库SQLite,是一款轻量级的关系型数据库。由于它占用的资源非常少,所以在很多嵌入式设备都是用SQLite来存储数据An droid作为

34、目前主流的移动操作系统,完全符合SQLite占用资源少的优势,故在An droid平台上,集成了一个嵌入式关系型数据库一SQLite。由于SQLite是轻量级的关系型数据库,它支持的 SQL语句也是有限的,在使用 SQL 语句获得前6名玩家的信息时直接使用了 SQLite不支持的TOP语句引起了异常。在查阅 相关资料后才发现SQLite不支持TOP语句,因此使用语句DESCLIMIT来代替TOP达到了 自己想要的只获得表compositor_table 中的score字段值最大的前六个记录信息。SELECT * FROM compositor_table ORDER BY score DESC

35、 LIMIT 64.3游戏界面设计4.3.1开始界面使用SurfaceView将图4-3中的未被按下的按钮和图4-5游戏开始界面背景图片绘制成游 戏开始界面图4-6。STARTOPTIONSCOREEXIT*图4-3未被按下的按钮图标集图基于Android的飞机大战游戏设计与开发 洛阳师范学院2013届本科生毕业设计 基于Android的飞机大战游戏设计与开发 START OPTION |SCOREAEXIT |4-4被按下的按钮图标集图4-5 开始界面背景图片图4-6开始界面AndroidManifest .xmlAn droid应用程序中,并没有像C+和Java这样有main函数来作为应用

36、程序的入口。 An droid应用程序提供的是入口 Activity,而非入口函数。An droidMa nifest.xml 文件中定义了整个 An droid 应用所包含的 Activity. 在 AndroidManifest.xml 中将 SkyGameStartActivity 设置为当前 SkyGamel动时,默认加 载的Activity ,代码如下: v/inten t-filterActivity 中注册 layout在SkyGameStartActivity 的on Create方法中设置要显示的layout,方法如下所示: protected void on Create(

37、B un dle savedl nsta nceState) / TODO Auto-ge nerated method stubsuper.o nCreate(savedl nsta nceState);layoutsetContentView(R.layout.sky_game_start_layou); 设置当前 activity 调用的/其他操作BroadcastReceiver由于本应用是有多个Activity 为了解决多个Activity在其中任意一个Activity 结束时都会相应一起退出系统,因此针对每一个Activity设置一个BroadcastReceiver来接收广播,一

38、旦接收到广播当前Activity自动退出。Activity接收到广播后退出的代码如下所示:private BroadcastReceiver exitReceiver = new BroadcastReceiver()Overridepublic void on Receive(C on text con text, I ntent intent) / TODO Auto-ge nerated method stub SkyGameScree nRollActivity.this.fi ni sh();发送广播而当前Activity 在被按下“ EXIT”或者“退出”按钮时,会向外界发送一个广

39、播,之后结束自己:Activity activity = (Activity)c on text; Intent intent = new Inten t(EXIT); in te nt.setActio n(EXIT); activity.se ndBroadcast(i nte nt); activity.fi nish(); MediaPlayer (媒体播放器)本应用使用An droid的MediaPlayer来演奏每一个页面的背景音乐。背景音乐可以存放在两个位置,一个是当前工程的 /res/raw 目录下,如果是存放在该目 录下的话,在in stall当前An droid工程时,需要

40、耗费非常的时间将此类音频文件上传到An droid虚拟机中。另一个存放位置是直接将音频文件上传到 DDMS勺/mn t/sdcard/Music 文件夹下,这相当于将该音频文件放入到了 An droid手机的SD卡上了,相对于存放位置 一来说,该方法在加载An droid工程时消耗的时间比较少。具体向虚拟机中上传文件如图4-7所示:祈3 电-F T 11: / f7 TyjFlug-m Uev_.科笼 Thr 酯曲 H曲p Allacati0f,i TrackerNetwork StatistiEiAlEupJofftf-I + - = Maiw理 DaU;TimePtmni&iSiionsl

41、 白2012-OT-241&33drwxrwxx沖匕mrrt2013-04-09吐阳drwwmrar-ico 凸 awe21M3-04490M7drwMFr-x 3 obb2013-m-0902:57drwxf-W-M B Band1970-01-01WtWd-rrwfflrir4 & Alarms2012-OT-24134d-rwxr-xp & DCtM2012-10-214:41dnumcr-M卜 b Dowmload134d rwxMi L0ST.D1RL2012-2415:3:3di*WKr-Mp B Movirs2Q12-OT-2415=34z 凶 Musk2013-04-090泗d

42、-rwxr-xak47.mpS対対2 2011-02-1635:1 :-rWKF-Ki c4-m.p337760 2011-024605cia-rmerxi .mp3750621 2012-10-2004:S4-rwicr-jit fc-mp3瑚环两 2012-10-2004:4L-rw冨 rgam&wer.mpJ2B61M7 2012-10-2005?03-rmr-jf| stairt.mpJ3:就4抽 2012-10-20逊-rwxr-wA Icjr Nolifcfftion-s2013-49-241M4& 占 PieSures2012-W-2415:34d-ftmer-k& Podcas

43、ts2012-CT-2415:34d rwxF-|fB r Rirgtones2012-OT-241534d-nwcr-xsecure2013-4i4-D9吐打drwwP G 5vste*n2012-0-272M1drwxr-r-x图 4-7 DDMS 向 An droid虚拟机中上传文件MediaPlayer使用方法:private MediaPlayer startSo und = nu II; startSo und = new MediaPlayer();try /*从sdcard中获得音频文件的路径*/startSo un d.setDataSource(/mn t/sdcard/M

44、usic/start.mp3);startSo un d.prepare(); catch (IllegalArgume ntExceptio n e) / TODO Auto-ge nerated catch blocke.pri ntStackTrace(); catch (SecurityExcepti on e) / TODO Auto-ge nerated catch blocke.pri ntStackTrace(); catch (IllegalStateExcepti on e) / TODO Auto-ge nerated catch blocke.pri ntStackTr

45、ace(); catch (IOExceptio n e) / TODO Auto-ge nerated catch blocke.pri ntStackTrace();startSo un d.setLoop in g(true) ;/设置循环由于当前应用针对不同的显示界面(Activity )有不同的背景音乐,因此当前Activity 挂起时,对应的背景音乐也要挂起(startSou nd.pause()。而在当前 Activity 销毁(destory )时,需要对背景音乐进行停止(startSound.stop() )和回收 (startSo un d.release() 操作。 la

46、yout 中调用 SurfaceView普通的layout设置与直接调用 SurfaceView的layout有所不同,一下列出调用 SurfaceView 的 layout 的格式:vcom.me ngyawei.sky.game.activity.view.SkyGameStartViewan droid:id=+id/skyGameStartPicturean droid:layout_width=wrap_c on te nt an droid:layout_height=wrap_co nte nt v/com.me ngyawei.sky.game.activity.view.Sk

47、yGameStartViewv/Lin earLayout此处使用自定义SurfaceView的绝对路径来编写开始页面的layout文件,使得开始 页面直接使用该SurfaceView绘制的Bit map作为背景图片来显示。SurfaceView所需要设置下它的SurfaceHolder 和Monitor(实现CallBack接口)属性 holder = getHolder();mon itor = new Moni tor();holder.addCallback(m on itor);Monitor类的方法:方法 surfaceCreated(SurfaceHolder holder)的主

48、要作用是:在 surfaceview 创建的 绘制SurfaceView的内容。方法 surfaceDestroyed(SurfaceHolder holder)的主要作用是:在 surfaceview 销毁 时对于当前SurfaceView中的一些对象做销毁处理。SurfaceView 的方法:on TouchEve nt(Motio nEve nt eve nt)可以捕获鼠标对于屏幕的触碰事件,在该方法中对于鼠标触碰的区域做出判断如果点击的为按钮图片的位置则会调用图4-4中对应的被按下按钮来显示,如此显示使用户有一个可感受的按钮被按下的动态即视感,用户体验更好。public boolea

49、n on TouchEve nt(Moti on Eve nt eve nt) / TODO Auto-ge nerated method stubint acti on = eve nt.getActio n();float eve ntX = eve nt.getX();float eve ntY = eve nt.getY();if(eve ntX = START_X&(eve ntX +startButto n. getWidth()&(eve ntY = START_Y&(eve ntY = OPTION_X )&(eve ntX = OPTION_Y)&(eve ntY = SCO

50、RE_X&(eve ntX = SCORE_Y&(eve ntY = EXIT_X)&(eve ntX = EXIT_Y)&(eventY = EXIT_Y + exitButton.getHeight()if(action = MotionEvent. ACTION_DOWN)scoreButt on = BitmapFactorydecodeResourcgetResources(), R.drawable.exit_butt on_2);drawExitButt on();if(action = MotionEvent. ACTION_UP)scoreButt on = BitmapFa

51、ctorydecodeResourcgetResources(), R.drawable.exit_butt on _1);drawExitButt on();Activity activity = (Activity)c on text;Intent intent = new Inten t(EXIT);in te nt.setActio n(EXIT);activity.se ndBroadcast(i nte nt);activity.fi nish();return true;4.3.2游戏界面本界面与开始界面都是使用 SurfaceView绘制的界面,由于本界面相对于开始界面更 加复

52、杂在主线程外创建了子线程来负责对于 SurfaceView的绘制工作,主线程负责对于各 类对象的控制计算等计算工作。由于游戏界面涉及到的类比较多,且逻辑复杂,所以在这里只介绍下使用的空间、技 术以及业务逻辑,粘贴部分技术代码。绘制的游戏界面如图4-8所示:图4-8游戏界面Activity 中注册 SurfaceView游戏界面并没有像开始界面那样注册 SurfaceView,而是直接在on Create方法中使用代码注册的自定义 SurfaceView,如下:private SkyGameScreenRollView sr = null;自定义 surfaceview protected vo

53、id on Create(B un dle saved In sta nceState) / TODO Auto-ge nerated method stubsuper.o nCreate(savedl nsta nceState);sr = new SkyGameScree nRollView(this);sr.setLayoutParams( new LayoutParams(LayoutParamlMATCH_PARENT, LayoutParamsMATCH_PARENT);sr.setId(0 x000101);setC onten tView(sr);4.322 ContextMe

54、nu 控件游戏界面使用了 An droid的Con textMe nu,Con textMe nu显示的具体效果见图 4-9。图 4-9ContextMenu 效果145B9oiQwERTiYuJ0pAsDG|HJKL置XVBNM |仪mt甲irContextMenu针对某个控件,一旦为某个控件设置了ContextMenu,那么程序员将不能再实现该控件的长按事件处理了。ContextMenu的使用步骤:ContextMenu针对的是控件而不是窗体,构建完 ContextMenu后需要与一个控件实施 绑定。绑定的代码为:super.registerForContextMenu(控件对象)。构建C

55、ontextMenu的方法如下:创建一个res/menu/*_context.xml的菜单(当前应用使用的该方法)。重写 onCreateContextMenu()回调函数。super.registerForContextMenu(控件对象)。为每个菜单项编写事件。具体操作方法重写onCreateMenultemSelected回调函数。游戏界面的 ContextMenu 的 playing_game_option_menu.xml 内容如下:item an droid:id=+id/pg_opti on _exitan droid:title=stri ng/optio n_menu _ex

56、itan droid:showAsActio n= never/item an droid:id=+id/pg_optio n_scorean droid:title=stri ng/optio n_menu _scorean droid:showAsActio n= never/item an droid:id=+id/pg_optio n_startan droid:title=stri ng/optio n_menu _startan droid:showAsActio n= never/item an droid:id=+id/pg_opti on _opti onan droid:t

57、itle=stri ng/optio n_menu _optio nan droid:showAsActio n= never/= this.player.getPla ne_x()&x = this.player.getPla ne_y()&y bloodBegin.getWidth()blood = Bitmap.createBitmap( fullBlood, 0, 0, le ng, fullBlood.getHeight();empty = Bitmap.createBitmap( emptyBlood, le ng, 0, emptyBlood.getWidth()-le ng,

58、emptyBlood.getHeight();canv as.drawBitmap( blood, 0,viewHeight - blood.getHeight(), nu II);canv as.drawBitmap( empty,blood.getWidth(),viewHeight - empty.getHeight(), n ull);else if(leng 0)blood = bloodBeg in;empty = Bitmap.createBitmap( emptyBlood, bloodBegi n. getWidth(), 0, emptyBlood.getWidth()-b

59、loodBegi n. getWidth(), emptyBlood.getHeight();can vas.drawBitmap( blood, 0,viewHeight - blood.getHeight(), nu II);can vas.drawBitmap( empty, blood.getWidth(), viewHeight - empty.getHeight(), n ull);elsecan vas.drawBitmap( emptyBlood, 0, viewHeight - emptyBlood.getHeight(), n ull);isPlayerDead = tru

60、e;4.3.3设置界面当前界面使用的是普通的layout,生成的设置界面如图4-15所示:图4-15设置界面 v?xml version=1.0 encoding=utf-8? vTextViewan droid:id=+id/tv_opti on_soundan droid:layout_width=0dpan droid:layout_height=wrap_co nte ntan droid:layout_weight=1an droid:gravity=ce nteran droid:text=stri ng/tv_opti on_soundandroid:textSize=20dp

温馨提示

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

评论

0/150

提交评论