版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 畢業(yè)設(shè)計(jì)說明書</b></p><p> 基于Android系統(tǒng)的打氣球游戲的設(shè)計(jì)與實(shí)現(xiàn)</p><p> 學(xué)生姓名: 學(xué)號(hào): </p><p> 學(xué) 院: </p><p>
2、 專 業(yè): </p><p> 指導(dǎo)教師: </p><p><b> 2012年 16月</b></p><p> 基于Android系統(tǒng)的打氣球游戲的設(shè)計(jì)與實(shí)現(xiàn)</p><p><b&
3、gt; 摘要</b></p><p> 隨著智能手機(jī)一步步走進(jìn)普通人的生活,它將成為人們獲取信息的主要設(shè)備。因此,手機(jī)的娛樂應(yīng)用服務(wù)將會(huì)有很大的發(fā)展空間,游戲也是其中之一[3]。本系統(tǒng)主要是實(shí)現(xiàn)基于Android的打氣球,打氣球是一款來自紅白機(jī)時(shí)期就非常盛行的游戲,其設(shè)計(jì)目的是訓(xùn)練人的應(yīng)變能力。打氣球這是一款簡(jiǎn)單的射擊類游戲,通過主菜單界面選擇進(jìn)入不同模式進(jìn)行游戲。游戲中有幾種不同顏色的氣球通過按
4、屏幕發(fā)射弓箭射擊氣球,射擊不同顏色的氣球會(huì)得到不同的分?jǐn)?shù),當(dāng)時(shí)間達(dá)到一定的時(shí)候會(huì)根據(jù)所得分?jǐn)?shù)判斷輸贏,從而進(jìn)入勝利或失敗界面。設(shè)計(jì)制作射氣球游戲的目的在于主要實(shí)現(xiàn)一套Android游戲開發(fā)的解決方案,解決目前在Android游戲開發(fā)中所面臨的幾大問題。主要有游戲的關(guān)卡切換,游戲地圖數(shù)據(jù)結(jié)構(gòu)的實(shí)現(xiàn)、應(yīng)用多種手機(jī)內(nèi)置傳感器進(jìn)行游戲控制、游戲動(dòng)畫的實(shí)現(xiàn)、基于圖形的碰撞檢測(cè)、數(shù)據(jù)在手機(jī)系統(tǒng)和實(shí)現(xiàn)。解決這些在Android游戲開發(fā)中所共同面臨的問
5、題,對(duì)于Android游戲開發(fā)效率與Android游戲的質(zhì)量有著極大的幫助作用。隨著計(jì)算機(jī)游戲的發(fā)展,很多編程愛好者基于該游戲的思想開發(fā)出了各種版本、各種類型的飛機(jī)游戲。這其中也包括很多手機(jī)版本的實(shí)現(xiàn)</p><p> Design and implementation of the Ace game based on Android</p><p><b> Summary
6、</b></p><p> As smartphones step into the lives of ordinary people , it will become the primary device for people to obtain information . Therefore , mobile entertainment applications will have much r
7、oom for development , the game is one of them . The system is Android -based ace , aircraft from World War II is a very prevalent during the NES game , which is designed to train people 's resilience. This is a class
8、ic aircraft flight shooting game , beautiful brilliant picture , the overall environment is mainl</p><p> This paper first discusses the background and status of android system , and then a brief introducti
9、on to the technology and analysis for android android , and describes the structure of android applications. In program development , designing a good game with a first class frame, and then realize the function of each
10、class will be realized in accordance with the code and write .</p><p> Keywords:android games, android aircraft ace, smartphones</p><p><b> 目錄</b></p><p><b> 1
11、 引言1</b></p><p> 1.1 系統(tǒng)簡(jiǎn)介1</p><p> 1.2 Android游戲的研究現(xiàn)狀1</p><p> 1.3 關(guān)于飛機(jī)大戰(zhàn)游戲設(shè)計(jì)2</p><p> 1.3.1基本思想2</p><p> 1.3.2基本結(jié)構(gòu)3</p><p&g
12、t; 1.3.3適用條件3</p><p> 2 開發(fā)環(huán)境及相關(guān)技術(shù)4</p><p> 2.1 開發(fā)環(huán)境4</p><p> 2.2 相關(guān)技術(shù)與工具4</p><p> 2.2.1 Eclipse4</p><p> 2.2.2 JDK4</p><p> 2.
13、2.3 ADT4</p><p> 2.2.4碰撞檢測(cè)技術(shù)5</p><p> 2.2.5 SurfaceView5</p><p><b> 3 需求分析6</b></p><p> 3.1 系統(tǒng)功能需求6</p><p> 3.1.1 業(yè)務(wù)需求分析7</p&g
14、t;<p> 3.1.2 用戶需求分析7</p><p> 3.1.2 功能需求分析7</p><p> 3.2 功能劃分概圖9</p><p> 4 概要設(shè)計(jì)10</p><p> 4.1 總體設(shè)計(jì)10</p><p> 4.1.1 系統(tǒng)流程10</p>
15、<p> 4.1.2 系統(tǒng)詳細(xì)結(jié)構(gòu)11</p><p> 4.2 模塊設(shè)計(jì)概述12</p><p> 4.2.1 開場(chǎng)動(dòng)畫模塊12</p><p> 4.2.2 道具制造模塊12</p><p> 4.2.3 游戲操作模塊13</p><p> 4.2.4 分?jǐn)?shù)統(tǒng)計(jì)模塊1
16、3</p><p> 4.3 數(shù)據(jù)結(jié)構(gòu)及接口定義14</p><p> 5 詳細(xì)設(shè)計(jì)20</p><p> 5.1 開場(chǎng)動(dòng)畫模塊20</p><p> 5.1.1 問題描述20</p><p> 5.1.2 問題分析20</p><p> 5.1.3 實(shí)現(xiàn)方法
17、21</p><p> 5.2 道具制造模塊24</p><p> 5.2.1 問題描述24</p><p> 5.2.2 問題分析24</p><p> 5.2.3 實(shí)現(xiàn)方法24</p><p> 5.3 游戲操作模塊28</p><p> 5.3.1 問題描
18、述28</p><p> 5.3.2 問題分析28</p><p> 5.3.3 實(shí)現(xiàn)方法28</p><p> 5.3 分?jǐn)?shù)統(tǒng)計(jì)模塊35</p><p> 5.3.1 問題描述35</p><p> 5.3.2 問題分析35</p><p> 5.3.3 實(shí)
19、現(xiàn)方法35</p><p> 6 系統(tǒng)測(cè)試37</p><p> 6.1 軟件測(cè)試的原則37</p><p> 6.2 測(cè)試的方法37</p><p> 6.3 本系統(tǒng)的測(cè)試38</p><p> 6.3.1 測(cè)試用例的設(shè)計(jì)38</p><p> 6.3.2
20、測(cè)試用例總結(jié)43</p><p><b> 7 結(jié)論44</b></p><p><b> 參考文獻(xiàn)45</b></p><p><b> 致謝46</b></p><p><b> 1 引言</b></p><p&
21、gt;<b> 1.1 系統(tǒng)簡(jiǎn)介</b></p><p> 隨著社會(huì)的發(fā)展,人們的工作壓力與日俱增。與此同時(shí)相應(yīng)的減壓放松的方式也慢慢發(fā)生了變化。人們更趨于在家或者工作閑余時(shí)間以電子游戲的方式達(dá)到娛樂的目的。一次,也就意味著,電子游戲的利潤(rùn)空間和發(fā)展空間是十分寬廣的[3]。</p><p> 飛機(jī)大戰(zhàn)是一款來自紅白機(jī)時(shí)期就非常盛行的游戲,其設(shè)計(jì)目的是訓(xùn)練人的應(yīng)
22、變能力。飛機(jī)大戰(zhàn)這是一款經(jīng)典飛行射擊類游戲,精美絢麗的畫面,整體環(huán)境主要還是圍繞太空為主,高保真的音效,為玩家呈現(xiàn)一場(chǎng)不一樣射擊體驗(yàn)。簡(jiǎn)單的觸屏操作,觸屏按住隨意一個(gè)地方,左右移動(dòng),便可自動(dòng)攻擊敵人,上下移動(dòng)亦可躲避強(qiáng)敵。玩家在游戲中要做的就是駕駛著最新戰(zhàn)機(jī),向敵人的總部發(fā)起了沖擊。</p><p> 本游戲利用Android開發(fā)語言,完成一個(gè)基于Android的飛行戰(zhàn)斗類游戲開發(fā)。在該游戲中,加入對(duì)應(yīng)的游戲策
23、略模型,游戲聲音,開場(chǎng)動(dòng)畫,計(jì)分分,關(guān)卡選擇,等功能。創(chuàng)建友好的UI界面,較強(qiáng)的游戲可玩性,操作的友好性。并利用游戲設(shè)計(jì)原則,提高游戲的智能,增強(qiáng)游戲的吸引力[3]。 </p><p> 1.2 Android游戲的研究現(xiàn)狀</p><p> Android一詞本意是指"機(jī)器人",同時(shí)也指Google于2007年11月5日推出的開源手機(jī)操作系統(tǒng)。Android基于
24、Linux平臺(tái),由操作系統(tǒng)、中間件、用戶界面和應(yīng)用軟件組成,號(hào)稱是首個(gè)為移動(dòng)終端打造的真正開放和完整的移動(dòng)軟件。它是由一個(gè)由 30 多家科技公司和手機(jī)公司組成的開放手機(jī)聯(lián)盟共同研發(fā),將大大降低新型手機(jī)設(shè)備的研發(fā)成本,完全整合的全移動(dòng)功能性產(chǎn)品成為"開放手機(jī)聯(lián)盟"的最終目標(biāo)[5]。</p><p> 自2007年Google發(fā)布Android系統(tǒng)1.0之后,各大手機(jī)生產(chǎn)廠商
25、紛紛將目光投向了最具發(fā)展?jié)摿Φ腁ndroid系統(tǒng),并陸續(xù)推出了各種品牌的搭載Android系統(tǒng)的智能手機(jī)[15]。時(shí)隔四年,Android手機(jī)在手機(jī)市場(chǎng)中占的市場(chǎng)份額正以非常迅猛的速度上升:2010年市場(chǎng)份額:Symbian 36.6%、Android 25.5%、iPhone 16.7、windows Mobile 2.8%、linux 2.1%。Nokia的Symbian系統(tǒng)在Android系統(tǒng)的沖擊下,正在從手機(jī)市場(chǎng)中的王者慢慢
26、被擠下來。在未來的幾年內(nèi),Android手機(jī)必定會(huì)占據(jù)手機(jī)市場(chǎng)的主要份額,所以在這種形式下,Android應(yīng)用的前景也必定是前景一片大好。 現(xiàn)如今Android的市場(chǎng)份額占總體智能手機(jī)市場(chǎng)份額的50%以上,相對(duì)于前幾年來說,其發(fā)展勢(shì)頭勢(shì)不可擋。以至于越來越多的開發(fā)商加入了Android應(yīng)用開發(fā)的行列[7]。在2010年,Android市場(chǎng)份額僅占4.7%左右,并其市場(chǎng)只有不到20000個(gè)應(yīng)用程序。但在2011年初,這個(gè)數(shù)字就已經(jīng)超過了2
27、5萬字大關(guān)。而隨著越來越多的應(yīng)用的誕生,由于其</p><p> 現(xiàn)如今,電子游戲已慢慢滲透進(jìn)人們生活中,并在扮演著越來越重的角色??梢哉f,隨著它的迅猛發(fā)展,現(xiàn)今的電子游戲已經(jīng)不僅僅是一種娛樂,而是形成了一種文化現(xiàn)象。隨著社會(huì)的發(fā)展,人們的工作壓力與日俱增。與此同時(shí)相應(yīng)的減壓放松的方式也慢慢發(fā)生了變化[7]。人們更趨于在家或者工作閑余時(shí)間以電子游戲的方式達(dá)到娛樂的目的。一次,也就意味著,電子游戲的利潤(rùn)空間和發(fā)展
28、空間是十分寬廣的。而作為現(xiàn)代人不可或缺,隨身攜帶的手機(jī)設(shè)備,則作為一類游戲的載體,有著廣泛的發(fā)展空間。而Android作為主流智能手機(jī)系統(tǒng)之一,研究和開發(fā)相應(yīng)應(yīng)用游戲是時(shí)代發(fā)展的趨勢(shì)[13]。</p><p> 1.3 關(guān)于飛機(jī)大戰(zhàn)游戲設(shè)計(jì)</p><p><b> 1.3.1基本思想</b></p><p> 飛機(jī)大戰(zhàn)這是一款經(jīng)典飛行
29、射擊類游戲,精美絢麗的畫面,整體環(huán)境主要還是圍繞太空為主,高保真的音效,為玩家呈現(xiàn)一場(chǎng)不一樣射擊體驗(yàn)。簡(jiǎn)單的觸屏操作,觸屏按住隨意一個(gè)地方,左右移動(dòng),便可自動(dòng)攻擊敵人,上下移動(dòng)亦可躲避強(qiáng)敵。玩家在游戲中要做的就是駕駛著最新戰(zhàn)機(jī),向敵人的總部發(fā)起了沖擊。這就要求玩家巧妙的運(yùn)用有限的空間和通道,合理的安排飛機(jī)的位置才可能完成任務(wù)。</p><p><b> 1.3.2基本結(jié)構(gòu)</b></
30、p><p> 本游戲開發(fā)設(shè)計(jì)共分為游戲開場(chǎng)動(dòng)畫、聲音模塊、游戲進(jìn)行模塊、道具制造模塊、分?jǐn)?shù)統(tǒng)計(jì)模塊五個(gè)模塊進(jìn)行設(shè)計(jì)開發(fā)。通過對(duì)Base界面類的繼承實(shí)現(xiàn)了游戲開場(chǎng)動(dòng)畫以及游戲資源文件的加載,當(dāng)獲取用戶點(diǎn)擊(單指)游戲開始時(shí),游戲進(jìn)入主界面,此時(shí)通過工廠類生產(chǎn)出飛機(jī)以及敵機(jī),用戶開始控制飛機(jī)進(jìn)行游戲。該設(shè)計(jì)充分運(yùn)用java面向?qū)ο蟮脑韺⑺械娘w機(jī)建立不同的類用以實(shí)現(xiàn)。并且根據(jù)玩家的進(jìn)度適當(dāng)?shù)某霈F(xiàn)道具,或是增強(qiáng)玩家飛機(jī)
31、的子彈能力,或是贈(zèng)予玩家刷屏炸彈,并實(shí)時(shí)對(duì)玩家計(jì)分。當(dāng)玩家駕駛飛機(jī)死亡后,將出現(xiàn)游戲統(tǒng)計(jì)界面,對(duì)玩家的信息進(jìn)行統(tǒng)計(jì)。以此鼓勵(lì)玩家</p><p><b> 1.3.3適用條件</b></p><p> 本次游戲設(shè)計(jì)可以在Android4.0版本以上的手機(jī)運(yùn)行,能自適應(yīng)Android手機(jī)的各種分辨率。創(chuàng)建友好的UI界面,較強(qiáng)的游戲可玩性,操作的友好性。并利用游戲設(shè)計(jì)
32、原則,提高游戲的智能,增強(qiáng)游戲的吸引力。由于游戲設(shè)計(jì)之處考慮過使用cocos2d,但由于相關(guān)文檔的困乏,并未采用。因此軟件運(yùn)行不如帶引擎的游戲運(yùn)行的流暢,并可能出現(xiàn)不跟手的現(xiàn)象,實(shí)屬正常。</p><p> 2 開發(fā)環(huán)境及相關(guān)技術(shù)</p><p><b> 2.1 開發(fā)環(huán)境</b></p><p> 硬件環(huán)境:Intel Core i
33、3 2100 MHz + 4GB RAM</p><p> 軟件環(huán)境:Windows 7+Eclipse+JDK+ ADT</p><p> 2.2 相關(guān)技術(shù)與工具</p><p> 2.2.1 Eclipse</p><p> Eclipse是著名的跨平臺(tái)的自由集成開發(fā)環(huán)境(IDE)。最初主要用來Java語言開發(fā),通過安裝不同的插
34、件Eclipse可以支持不同的計(jì)算機(jī)語言,比如C++和Python等開發(fā)工具。Eclipse的本身只是一個(gè)框架平臺(tái),但是眾多插件的支持使得Eclipse擁有其他功能相對(duì)固定的IDE軟件很難具有的靈活性。許多軟件開發(fā)商以Eclipse為框架開發(fā)自己的IDE。</p><p><b> 2.2.2 JDK</b></p><p> JDK(Java Developme
35、nt Kit,Java開發(fā)包,Java開發(fā)工具)是一個(gè)寫Java的applet和應(yīng)用程序的程序開發(fā)環(huán)境。它由一個(gè)處于操作系統(tǒng)層之上的運(yùn)行環(huán)境還有開發(fā)者編譯,調(diào)試和運(yùn)行用Java語言寫的applet和應(yīng)用程序所需的工具組成。JDK(Java Development Kit)是Sun Microsystems針對(duì)Java開發(fā)員的產(chǎn)品。自從Java推出以來,JDK已經(jīng)成為使用最廣泛的Java SDK(Software development
36、kit)。JDK由一個(gè)標(biāo)準(zhǔn)類庫和一組建立,測(cè)試及建立文檔的Java實(shí)用程序組成。其核心Java API是一些預(yù)定義的類庫,開發(fā)人員需要用這些類來訪問Java語言的功能。Java API包括一些重要的語言結(jié)構(gòu)以及基本圖形,網(wǎng)絡(luò)和文件I/O。一般來說,Java API的非I/O部分對(duì)于運(yùn)行Java的所有平臺(tái)是相同的,而I/O部分則僅在通用Java環(huán)境中實(shí)現(xiàn)[1]。</p><p><b> 2.2.3 A
37、DT</b></p><p> 即Android Development Tools,在Eclipse編譯IDE環(huán)境中,需安裝ADT (Android Developer Tools)Plug-in,這是Android在Eclipse上的開發(fā)工具。目前Android開發(fā)所用的開發(fā)工具是Eclipse,在Eclipse編譯IDE環(huán)境中,安裝ADT,為Android開發(fā)提供開發(fā)工具的升級(jí)或者變更,簡(jiǎn)單理
38、解為在Eclipse下開發(fā)工具的升級(jí)下載工具[2]。</p><p> 其中還包括SDK(Software Development Kit),一般是一些被軟件工程師用于為特定的軟件包、軟件框架、硬件平臺(tái)、操作系統(tǒng)等建立應(yīng)用軟件的開發(fā)工具的集合。在Android中,它為開發(fā)者提供了庫文件以及其它開發(fā)所用到的工具。簡(jiǎn)單理解為開發(fā)工具包集合,是整體開發(fā)中所用到的工具包,如果你不用Eclipse作為你的開發(fā)工具,你就不
39、需要下載ADT,只下載SDK即可開發(fā)。</p><p> 2.2.4 碰撞檢測(cè)技術(shù)</p><p> 碰撞檢測(cè)在2D/3D游戲中至關(guān)重要,好的碰撞檢測(cè)要求人物在場(chǎng)景中可以平滑移動(dòng),遇到一定高度內(nèi)的臺(tái)階可以自動(dòng)上去,而過高的臺(tái)階則把人擋住,遇到斜率較小的斜坡可以上去,斜率過大則把人擋住,在各種前進(jìn)方向被擋住的情況下都要盡可能地讓人物沿合理的方向滑動(dòng)而不是被迫停下。在滿足這些要求的同時(shí)還要
40、做到足夠精確和穩(wěn)定,防止人物在特殊情況下穿墻而掉出場(chǎng)景[7]。</p><p> 2.2.5 SurfaceView</p><p> 可以直接從內(nèi)存或者DMA等硬件接口取得圖像數(shù)據(jù),是個(gè)非常重要的繪圖容器。它的特性是:可以在主線程之外的線程中向屏幕繪圖上。這樣可以避免畫圖任務(wù)繁重的時(shí)候造成主線程阻塞,從而提高了程序的反應(yīng)速度。在游戲開發(fā)中多用到SurfaceView,游戲中的背景、人
41、物、動(dòng)畫等等盡量在畫布Canvas中畫出。</p><p><b> 3 需求分析</b></p><p> 3.1 系統(tǒng)功能需求</p><p> 3.1.1 業(yè)務(wù)需求分析</p><p> 雖然現(xiàn)在市面上存在著各種各樣的游戲版本,可是飛機(jī)大戰(zhàn)其市場(chǎng)還是相當(dāng)大的,比如微信飛機(jī)大戰(zhàn)。因?yàn)樗奶厥庠谟谒芪?/p>
42、人更深入,愛不釋手.隨著游戲速度不斷加快,其刺激性也更強(qiáng).可以說該游戲的優(yōu)勢(shì)在于它的簡(jiǎn)單易行,不論是手機(jī),還是小游戲機(jī),都能很快順利的運(yùn)行.對(duì)于在外忙碌的人,不可能花費(fèi)大量時(shí)間在娛樂上,大型游戲是行不通的,這樣的小游戲剛好迎合了他們的需求. </p><p> 飛機(jī)大戰(zhàn)游戲基于JAVA平臺(tái)編寫,采用Android技術(shù)開發(fā)的一款手機(jī)游戲。手機(jī)游戲程序是一項(xiàng)精度要求很高的程序系統(tǒng),因?yàn)槠浯a利用率很高。一個(gè)實(shí)時(shí)運(yùn)
43、行的最終作品,每秒都會(huì)運(yùn)行成千上萬行程序,繪圖事件、鍵盤事件都會(huì)以極高的頻率在后臺(tái)等待響應(yīng),若有絲毫的差別都將很容易導(dǎo)致程序在運(yùn)行不久后可能出現(xiàn)嚴(yán)重錯(cuò)誤,甚至死循環(huán)。因此,其邏輯設(shè)計(jì)應(yīng)當(dāng)相當(dāng)嚴(yán)謹(jǐn),需將所有可能發(fā)生的事件及意外情況考慮在設(shè)計(jì)中。JAVA是基于虛擬機(jī)的半解釋型編譯系統(tǒng),其執(zhí)行效率較C++等完全編譯后的程序會(huì)低很多,程序如果不進(jìn)行精簡(jiǎn)和優(yōu)化,將可能導(dǎo)致運(yùn)行的不流暢。游戲的結(jié)束、開始、動(dòng)態(tài)信息畫面作為構(gòu)成一個(gè)程序都是必不可少的重
44、要部分。良好的用戶界面更是吸引用戶的硬指標(biāo),相關(guān)的美術(shù)構(gòu)圖和人性化設(shè)置也需要有一定的考慮。 </p><p> 3.1.2 用戶需求分析</p><p> 用戶需求分析指在系統(tǒng)設(shè)計(jì)之前和設(shè)計(jì)、開發(fā)過程中對(duì)用戶需求所作的調(diào)查與分析,是系統(tǒng)設(shè)計(jì)、系統(tǒng)完善和系統(tǒng)維護(hù)的依據(jù)。一個(gè)的好的用戶需求分析可以讓系統(tǒng)變的更加完善,能貼合玩家的真實(shí)需求,從而達(dá)到一個(gè)游戲與玩家完全契合的水平。</p
45、><p> 本項(xiàng)目中用戶的需求如下圖所示: </p><p> 圖 3.1 用戶需求用例圖</p><p> 游戲開發(fā)成功后,最終用戶為各個(gè)年齡段的人群,用戶范圍相當(dāng)廣泛。但是用戶對(duì)軟件產(chǎn)品也有一定的要求: </p><p><b> ?。?)簡(jiǎn)單易學(xué) </b></p><p> 時(shí)間不管對(duì)于
46、誰來說都是寶貴的,用戶不會(huì)愿意花大量時(shí)間去學(xué)習(xí)使用一款 軟件。一款軟件如果操作界面不友好,讓用戶難以上手使用,那就說明這款軟件開發(fā)得不夠成功,從而失去大量的用戶。所以本項(xiàng)目必須擁有良好的交互界面,讓用戶安裝之后就能進(jìn)行游戲。 </p><p><b> ?。?)運(yùn)行穩(wěn)定 </b></p><p> 一款軟件設(shè)計(jì)得不夠好,那么就有可能在運(yùn)行的時(shí)候出現(xiàn)一些不可預(yù)
47、料的錯(cuò)誤從而造成軟件崩潰。如果用戶正在游戲突然軟件崩潰了,無疑會(huì)讓用戶感到非常不舒服,有可能就把軟件給卸載了,這樣也會(huì)失去很多用戶。 </p><p><b> ?。?)操作簡(jiǎn)便 </b></p><p> 用戶不是程序員,他們不知道程序的內(nèi)部邏輯。所以程序員必須提供給用戶便捷的操作接口來供用戶操作,靈活便捷的操作性直接影響了一款軟件的好壞。軟件是做給用戶使用的,所
48、以一切都要站在用戶的角度來看問題。</p><p> 3.1.3 功能需求分析</p><p> 本項(xiàng)目是一個(gè)運(yùn)行在Android手機(jī)上的游戲,玩家可以從手機(jī)觸屏開始游戲,操控游戲,結(jié)束游戲; 玩家開始游戲后,在手機(jī)屏幕上繪制出一架玩家飛機(jī)以及多架敵機(jī),玩家飛機(jī)可以響應(yīng)用戶的手指,隨手指移動(dòng),并不斷的發(fā)出子彈攻擊敵機(jī),敵機(jī)在屏幕上段隨機(jī)出現(xiàn),并沿著垂直線以一定的速度下落至屏幕下端,如
49、果敵機(jī)碰上玩家飛機(jī),那么游戲結(jié)束。同時(shí)生產(chǎn)一個(gè)太空幕布不斷的下移。當(dāng)玩家飛機(jī)的子彈碰上敵機(jī)時(shí)會(huì)根據(jù)敵機(jī)類型以及被攻擊次數(shù)來選擇是否墜毀,不論是玩家飛機(jī)墜毀或者敵機(jī)墜毀,都會(huì)出現(xiàn)爆炸畫面。 當(dāng)游戲結(jié)束后,顯示并保存玩家在游戲中所獲得的分?jǐn)?shù)。 </p><p> 本Android飛機(jī)大戰(zhàn)游戲,總體分為以下幾個(gè)四模塊:</p><p><b> 開場(chǎng)動(dòng)畫模塊</b>&l
50、t;/p><p> 本模塊用于用戶登陸游戲的設(shè)計(jì),該模塊具有初始畫布功能,初始化聲音功能,同時(shí)保持屏幕全屏并且屏幕常亮,能繪制飛機(jī)的過場(chǎng)動(dòng)畫以及開始游戲和退出游戲按鈕,通過Java線程及Android線程知識(shí),能通過不同的按鈕點(diǎn)擊返回不同的參數(shù)用以判斷是進(jìn)入游戲主界面還是退出游戲,如果沒有操作的話,則一直停留在此界面,并且不停的播放飛機(jī)大戰(zhàn)的過場(chǎng)動(dòng)畫,該模塊設(shè)計(jì)精良,界面美觀大方,飛機(jī)過場(chǎng)動(dòng)畫流暢。</p&g
51、t;<p><b> 道具制造模塊</b></p><p> 本模塊用于在用戶進(jìn)入游戲主界面時(shí),制造出游戲運(yùn)行時(shí)所需的道具,這些道具包括大型敵機(jī)、BOSS子彈、BOSS敵機(jī)、中型敵機(jī)、導(dǎo)彈物品、玩家飛機(jī)的子彈(兩種威力)、玩家飛機(jī)、小型敵機(jī)。該模塊為這些道具初始化了圖片資源以及繪圖方法,并且定義了每個(gè)道具的邏輯屬性,以方便游戲操作模塊、分?jǐn)?shù)統(tǒng)計(jì)模塊的調(diào)用。該模塊充分運(yùn)用ja
52、va面向?qū)ο蟮闹R(shí),合理運(yùn)用了接口的定義,為每個(gè)子彈,飛機(jī)都設(shè)置了基類,以方便日后對(duì)程序進(jìn)行調(diào)整。</p><p><b> 游戲操作模塊</b></p><p> 本模塊為飛機(jī)大戰(zhàn)游戲核心模塊,進(jìn)入本模塊之后,Surface view會(huì)描繪出游戲背景幕布,以及玩家飛機(jī),和上方飛來的敵機(jī),本模塊要求能監(jiān)聽玩家操作,玩家可以通過觸摸屏觸點(diǎn)的位置不同來控制飛機(jī)。在玩家
53、飛機(jī)出現(xiàn)時(shí)飛機(jī)連續(xù)發(fā)子彈,只要飛機(jī)出現(xiàn),就持續(xù)發(fā)射。飛機(jī)具有多樣性供玩家選擇,飛機(jī)可以升級(jí)子彈威力、飛機(jī)可以改變子彈類型、還能出現(xiàn)大招即飛機(jī)有清屏導(dǎo)彈。游戲操作模塊定義的敵機(jī)為上下飛行的,都是統(tǒng)一從屏幕上方飛下來,敵機(jī)不具備發(fā)射子彈功能,但是當(dāng)敵機(jī)碰撞到玩家飛機(jī)后,玩家飛機(jī)死亡。當(dāng)敵機(jī)只要出現(xiàn)在子彈圖片范圍內(nèi),根據(jù)子彈威力選擇掉血或者爆炸。在游戲進(jìn)行中,會(huì)出現(xiàn)音效,每次玩家飛機(jī)發(fā)射子彈是都會(huì)出現(xiàn)聲音,當(dāng)飛機(jī)爆炸是也會(huì)出現(xiàn)相應(yīng)的音效。&l
54、t;/p><p><b> 分?jǐn)?shù)統(tǒng)計(jì)模塊</b></p><p> 在游戲進(jìn)行中時(shí),本模塊進(jìn)行實(shí)時(shí)的分?jǐn)?shù)統(tǒng)計(jì),根據(jù)不同的擊落類型給予玩家不同的分?jǐn)?shù),并在玩家游戲結(jié)束時(shí),給出玩家分?jǐn)?shù)統(tǒng)計(jì)結(jié)果,以此鼓勵(lì)玩家。增加游戲的趣味性以及可玩性。</p><p> 3.2 功能劃分概圖</p><p> 圖3.2 功能劃分概圖&
55、lt;/p><p><b> 4 概要設(shè)計(jì)</b></p><p><b> 4.1 總體設(shè)計(jì)</b></p><p> 4.1.1 系統(tǒng)流程</p><p> 系統(tǒng)主要是設(shè)計(jì)設(shè)計(jì)并實(shí)現(xiàn)飛機(jī)大戰(zhàn)游戲操作,通過畫筆繪制游戲界面展示給玩家。系統(tǒng)流程如圖4.1所示:</p><
56、;p> 圖4.1 系統(tǒng)流程圖</p><p> 4.1.2 系統(tǒng)詳細(xì)結(jié)構(gòu)</p><p> 系統(tǒng)流程只是大概描述了系統(tǒng)的整體數(shù)據(jù)流程并沒有更加具體的數(shù)據(jù)結(jié)構(gòu)的描述。下面讓我們更深一層的描述系統(tǒng)的整體結(jié)構(gòu)以及細(xì)節(jié)問題。</p><p><b> 如圖4.2所示:</b></p><p> 圖4.2 系統(tǒng)結(jié)
57、構(gòu)圖</p><p> 4.2 模塊設(shè)計(jì)概述</p><p> 如圖4.2的系統(tǒng)詳細(xì)結(jié)構(gòu)圖所示,系統(tǒng)雖然主要分為“開場(chǎng)動(dòng)畫模塊”、“道具制造模塊”、“游戲操作模塊”、“分?jǐn)?shù)統(tǒng)計(jì)模塊”四個(gè)主要模塊,但是每個(gè)模塊都需要很多特殊的技巧以及算法來保證其的正確實(shí)施,同時(shí)模塊之間也需要良好的接口配合才行的。</p><p> 4.2.1 開場(chǎng)動(dòng)畫模塊</p>
58、;<p> 開場(chǎng)動(dòng)畫模塊由MainActivity.java、ReadyView.java類來實(shí)現(xiàn),MainActivity主要為游戲入口,可以通過Handler機(jī)制進(jìn)行游戲各個(gè)模塊的切換。ReadyView則是來繪制游戲的初始界面并將MainActivity的功能按鈕顯示在初始界面上,并對(duì)初始界面的飛機(jī)過場(chǎng)動(dòng)畫進(jìn)行定義。繪制完成后將等待玩家操作是進(jìn)入游戲還是退出游戲。本模塊用于用戶登陸游戲的設(shè)計(jì),該模塊具有初始畫布功能
59、,初始化聲音功能,同時(shí)保持屏幕全屏并且屏幕常亮,能繪制飛機(jī)的過場(chǎng)動(dòng)畫以及開始游戲和退出游戲按鈕,如果沒有操作的話,則一直停留在此界面,并且不停的播放飛機(jī)大戰(zhàn)的過場(chǎng)動(dòng)畫,該模塊設(shè)計(jì)精良,界面美觀大方,飛機(jī)過場(chǎng)動(dòng)畫流暢。</p><p> 4.2.2 道具制造模塊</p><p> 道具制造模塊由cn.edu.nuc.object包的眾多物品類來定義各個(gè)物品的屬性,創(chuàng)建每個(gè)物品的類,Ga
60、meObjectFactory相當(dāng)于一個(gè)工廠類,可以將前面的所有的物品的實(shí)現(xiàn)方法定義在本類之中,以此來實(shí)現(xiàn)工程模式,工廠模式主要是為創(chuàng)建對(duì)象提供過渡接口,以便將創(chuàng)建對(duì)象的具體過程屏蔽隔離起來,達(dá)到提高靈活性的目的。在本模式下僅實(shí)例一次對(duì)象,提高了工作效率。本類所使用的為簡(jiǎn)單工廠模式類,道具包括大型敵機(jī)、BOSS子彈、BOSS敵機(jī)、中型敵機(jī)、導(dǎo)彈物品、玩家飛機(jī)的子彈(兩種威力)、玩家飛機(jī)、小型敵機(jī)。該模塊為這些道具初始化了圖片資源以及繪圖
61、方法,并且定義了每個(gè)道具的邏輯屬性,以方便游戲操作模塊、分?jǐn)?shù)統(tǒng)計(jì)模塊的調(diào)用。道具類詳解如圖4.3所示:</p><p> 圖4.3 道具類詳解圖</p><p> 4.2.3 游戲操作模塊</p><p> 本模塊為飛機(jī)大戰(zhàn)游戲核心模塊,由MainView.java來實(shí)現(xiàn)。當(dāng)用戶在ReadyView上點(diǎn)擊開始游戲后,程序進(jìn)入MainView,本來通過調(diào)用工廠
62、方法生產(chǎn)出物品,根據(jù)游戲消耗和進(jìn)行的情況,實(shí)時(shí)的制造相應(yīng)的物品;通過游戲進(jìn)行繪圖模塊,繪制游戲背景圖,繪制飛機(jī)控件根據(jù)玩家操作進(jìn)行邏輯判決,繪制畫面。增加分?jǐn)?shù)和等級(jí),并發(fā)出相應(yīng)的音效;通過背景移動(dòng)模塊,調(diào)整兩個(gè)圖片的高度,制造出背景移動(dòng)效果;通過運(yùn)行間隔時(shí)間控制模塊控制運(yùn)行間隔時(shí)間。在玩家飛機(jī)出現(xiàn)時(shí)飛機(jī)連續(xù)發(fā)子彈,只要飛機(jī)出現(xiàn),就持續(xù)發(fā)射。飛機(jī)具有多樣性供玩家選擇,飛機(jī)可以升級(jí)子彈威力、飛機(jī)可以改變子彈類型、還能出現(xiàn)大招即飛機(jī)有清屏導(dǎo)彈
63、。游戲操作模塊定義的敵機(jī)為上下飛行的,都是統(tǒng)一從屏幕上方飛下來,敵機(jī)不具備發(fā)射子彈功能,但是當(dāng)敵機(jī)碰撞到玩家飛機(jī)后,玩家飛機(jī)死亡。當(dāng)敵機(jī)只要出現(xiàn)在子彈圖片范圍內(nèi),根據(jù)子彈威力選擇掉血或者爆炸。在游戲進(jìn)行中,會(huì)出現(xiàn)音效,每次玩家飛機(jī)發(fā)射子彈是都會(huì)出現(xiàn)聲音,當(dāng)飛機(jī)爆炸是也會(huì)出現(xiàn)相應(yīng)的音效。</p><p> 4.2.4 分?jǐn)?shù)統(tǒng)計(jì)模塊</p><p> 本模塊由EndView.java來實(shí)
64、現(xiàn),當(dāng)在MainView.java中檢測(cè)到玩家飛機(jī)的isAlive()參數(shù)為false時(shí),即為玩家所駕駛的飛機(jī)因?yàn)樽矒舻綌硻C(jī)而死亡,此時(shí)通過Handler發(fā)出的消息,程序進(jìn)入EndView中,在本模塊中畫筆繪制開場(chǎng)動(dòng)畫背景及按鈕;畫筆繪制玩家游戲最終得分;通過Android Handler為重新開始或者退出游戲按鈕綁定相應(yīng)的功能在游戲進(jìn)行中時(shí),本模塊進(jìn)行實(shí)時(shí)的分?jǐn)?shù)統(tǒng)計(jì),根據(jù)不同的擊落類型給予玩家不同的分?jǐn)?shù),并在玩家游戲結(jié)束時(shí),給出玩家分
65、數(shù)統(tǒng)計(jì)結(jié)果,以此鼓勵(lì)玩家。增加游戲的趣味性以及可玩性。</p><p> 4.3 數(shù)據(jù)結(jié)構(gòu)及接口定義</p><p><b> (1)開場(chǎng)動(dòng)畫模塊</b></p><p> private float fly_x;// 圖片的坐標(biāo)</p><p> private float fly_y;</p
66、><p> private float fly_height;</p><p> private float text_x;</p><p> private float text_y;</p><p> private float button_x;</p><p> private float button_
67、y;</p><p> private float button_y2;</p><p> private float strwid;</p><p> private float strhei;</p><p> private boolean isBtChange;// 按鈕圖片改變的標(biāo)記</p><p
68、> private boolean isBtChange2;</p><p> private String startGame = "開始游戲";// 按鈕的文字</p><p> private String exitGame = "退出游戲";</p><p> private Bitmap text;
69、// 文字圖片</p><p> private Bitmap button;// 按鈕圖片</p><p> private Bitmap button2;// 按鈕圖片</p><p> private Bitmap planefly;// 飛機(jī)飛行的圖片</p><p> private Bi
70、tmap background;// 背景圖片</p><p> private Rect rect;// 繪制文字的區(qū)域</p><p> protected int currentFrame;// 當(dāng)前動(dòng)畫幀</p><p> protected float scalex;// 背景圖片的縮放比例</p>
71、<p> protected float scaley;</p><p> protected float screen_width;// 視圖的寬度</p><p> protected float screen_height;// 視圖的高度</p><p> protected boolean threadFlag;//
72、線程運(yùn)行的標(biāo)記</p><p> protected Paint paint; // 畫筆對(duì)象</p><p> protected Canvas canvas; // 畫布對(duì)象</p><p> protected Thread thread; // 繪圖線程</p><p> protected Surf
73、aceHolder sfh;</p><p> protected GameSoundPool sounds;</p><p> public ReadyView(Context context,GameSoundPool sounds)</p><p> public void surfaceChanged(SurfaceHolder arg0, int a
74、rg1, int arg2, int arg3)</p><p> public void surfaceCreated(SurfaceHolder arg0)</p><p> public void surfaceDestroyed(SurfaceHolder arg0)</p><p> public boolean onTouchEvent(Motio
75、nEvent event) </p><p> public void initBitmap()</p><p> public void release()</p><p> public void drawSelf() </p><p> public void run()</p><p> public
76、 void setThreadFlag(boolean threadFlag) </p><p><b> 道具制造模塊</b></p><p> private static int currentCount = 0; //對(duì)象當(dāng)前的數(shù)量</p><p> public static int sumCount = 2; /
77、/對(duì)象總的數(shù)量</p><p> private Bitmap bigPlane; // 對(duì)象圖片</p><p> protected int score; // 對(duì)象的分值</p><p> protected int blood; // 對(duì)象的當(dāng)前血量</p><p> protected int b
78、loodVolume; // 對(duì)象總的血量</p><p> protected boolean isExplosion; // 判斷是否爆炸</p><p> protected boolean isVisible; // 對(duì)象是否為可見狀態(tài)</p><p> public EnemyPlane(Resources res
79、ources)</p><p> public void initial(int arg0,float arg1,float arg2)</p><p> public void initBitmap() </p><p> public void drawSelf(Canvas canvas) </p><p> public vo
80、id release()</p><p> public boolean isCollide(GameObject obj) </p><p> public int getHarm() </p><p> public void setHarm(int harm)</p><p> private static int curren
81、tCount = 0; //對(duì)象當(dāng)前的數(shù)量</p><p> private static int sumCount = 1;</p><p> private Bitmap boosPlane;</p><p> private Bitmap boosPlaneBomb;</p><p> private int directi
82、on;//移動(dòng)的方向</p><p> private int interval;//發(fā)射子彈的間隔</p><p> private float leftBorder;//飛機(jī)能移動(dòng)的左邊界</p><p> private float rightBorder;//飛機(jī)能移動(dòng)的右邊界</p><p> priva
83、te boolean isFire;//是否允許射擊</p><p> private boolean isCrazy;//是否為瘋狂狀態(tài)</p><p> private List<Bullet> bullets;//子彈類</p><p> public void setScreenWH(float screen_width,flo
84、at screen_height)</p><p> public void initial(int arg0,float arg1,float arg2)</p><p> public void initButtle()</p><p> public boolean shoot(Canvas canvas)</p><p> p
85、ublic void logic()</p><p> private int direction;//物品的方向</p><p> private float middle_x; // 飛機(jī)的中心坐標(biāo)</p><p> private float middle_y;</p><p> private long start
86、Time; // 開始的時(shí)間</p><p> private long endTime; // 結(jié)束的時(shí)間</p><p> private boolean isChangeBullet; // 標(biāo)記更換了子彈</p><p> private Bitmap myplane; // 飛機(jī)飛行時(shí)的圖片</p><
87、p> private Bitmap myplane2; // 飛機(jī)爆炸時(shí)的圖片</p><p> private List<Bullet> bullets; // 子彈的序列</p><p> public void changeButtle()</p><p> public void isBulletOverTime()</
88、p><p> public GameObject createSmallPlane(Resources resources)</p><p> public GameObject createMiddlePlane(Resources resources)</p><p> public GameObject createBigPlane(Resources re
89、sources)</p><p> public GameObject createBossPlane(Resources resources)</p><p> public GameObject createMyPlane(Resources resources)</p><p> public GameObject createMyBullet(Reso
90、urces resources)</p><p> public GameObject createMyBullet2(Resources resources)</p><p> public GameObject createBossBullet(Resources resources)</p><p> public GameObject createMi
91、ssileGoods(Resources resources)</p><p> public GameObject createBulletGoods(Resources resources)</p><p><b> 游戲操作模塊</b></p><p> private int missileCount; // 導(dǎo)彈的數(shù)量<
92、;/p><p> private int middlePlaneScore;// 中型敵機(jī)的積分</p><p> private int bigPlaneScore;// 大型敵機(jī)的積分</p><p> private int bossPlaneScore;// boss型敵機(jī)的積分</p><p> private in
93、t missileScore;// 導(dǎo)彈的積分</p><p> private int bulletScore;// 子彈的積分</p><p> private int sumScore;// 游戲總得分</p><p> private int speedTime;// 游戲速度的倍數(shù)</p><p> p
94、rivate float bg_y;// 圖片的坐標(biāo)</p><p> private float bg_y2;</p><p> private float play_bt_w;</p><p> private float play_bt_h; </p><p> private float missile_bt_y;
95、 </p><p> private boolean isPlay;// 標(biāo)記游戲運(yùn)行狀態(tài)</p><p> private boolean isTouchPlane;// 判斷玩家是否按下屏幕</p><p> private Bitmap background; // 背景圖片</p><p> private B
96、itmap background2; // 背景圖片</p><p> private Bitmap playButton; // 開始/暫停游戲的按鈕圖片</p><p> private Bitmap missile_bt;// 導(dǎo)彈按鈕圖標(biāo)</p><p> private MyPlane myPlane;// 玩家的飛機(jī)</p>
97、;<p> private BossPlane bossPlane;// boss飛機(jī)</p><p> private List<EnemyPlane> enemyPlanes;</p><p> private MissileGoods missileGoods;</p><p> private BulletGoods bu
98、lletGoods;</p><p> public MainView(Context context,GameSoundPool sounds)</p><p> public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3)</p><p> public void
99、surfaceCreated(SurfaceHolder arg0) </p><p> public void surfaceDestroyed(SurfaceHolder arg0)</p><p> public boolean onTouchEvent(MotionEvent event)</p><p> public void initBitmap
100、() </p><p> public void initObject()</p><p> public void release()</p><p> public void drawSelf()</p><p> public void viewLogic()</p><p> public void
101、addGameScore(int score)</p><p> public void playSound(int key)</p><p><b> (4)分?jǐn)?shù)統(tǒng)計(jì)模塊</b></p><p> private int score;</p><p> private float button_x;</p
102、><p> private float button_y;</p><p> private float button_y2;</p><p> private float strwid;</p><p> private float strhei;</p><p> private boolean isBtCh
103、ange;// 按鈕圖片改變的標(biāo)記</p><p> private boolean isBtChange2;</p><p> private String startGame = "重新挑戰(zhàn)";// 按鈕的文字</p><p> private String exitGame = "退出游戲";</p
104、><p> private Bitmap button;// 按鈕圖片</p><p> private Bitmap button2;// 按鈕圖片</p><p> private Bitmap background;// 背景圖片</p><p> private Rect rect;// 繪
105、制文字的區(qū)域</p><p> public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) </p><p> public void surfaceCreated(SurfaceHolder arg0)</p><p> public void surfaceDes
106、troyed(SurfaceHolder arg0) </p><p> public boolean onTouchEvent(MotionEvent event) </p><p> public void initBitmap() </p><p> public void release()</p><p> public v
107、oid drawSelf()</p><p> public void run()</p><p> public void setScore(int score)</p><p><b> 5 詳細(xì)設(shè)計(jì)</b></p><p> 本飛機(jī)大戰(zhàn)游戲的設(shè)計(jì)看似簡(jiǎn)單,只有那么幾個(gè)子模塊,每個(gè)子模塊的功能很清晰也很簡(jiǎn)單
108、的樣子,但是事實(shí)上卻不是這樣的。每個(gè)子模塊除了要充分完成自己應(yīng)有的功能外還要考慮與其它子模塊的通信接口的定義,并且完成自己應(yīng)有的功能時(shí)也會(huì)用到很多別的細(xì)小的編程技巧和方法。本部分名為詳細(xì)設(shè)計(jì),但是一定要詳詳細(xì)細(xì)的描述出所有的細(xì)節(jié)問題是很有難度的,在這里只是把最主要的問題抽出來詳細(xì)說明,有些細(xì)節(jié)問題的描述可能會(huì)被忽略掉,但是會(huì)提到其作用的。本部分分四個(gè)大的子模塊來描述詳細(xì)設(shè)計(jì)的過程。</p><p> 5.1
109、開場(chǎng)動(dòng)畫模塊</p><p> 5.1.1 問題描述</p><p> 開場(chǎng)動(dòng)畫模塊為整個(gè)游戲的入口,在本入口提供給玩家開始游戲、退出游戲的按鈕,本模塊實(shí)現(xiàn)的一個(gè)大功能就是如何為按鈕實(shí)現(xiàn)功能,因?yàn)榘粹o為圖片控件,并不能通過綁定監(jiān)聽器的方法來做到。而后就是開場(chǎng)動(dòng)畫的繪制,和初始界面的繪制,本模塊為游戲的入口,因此應(yīng)該設(shè)計(jì)的華麗,美觀,能給用戶眼前一亮的感覺。這就對(duì)Surface vie
110、w繪圖提出了一個(gè)高要求。</p><p> 5.1.2 問題分析</p><p> 關(guān)于按鈕的實(shí)現(xiàn)設(shè)計(jì)UI線程和子線程交互的問題。當(dāng)應(yīng)用啟動(dòng),系統(tǒng)會(huì)創(chuàng)建一個(gè)主線程(main thread)。這個(gè)主線程負(fù)責(zé)向UI組件分發(fā)事件(包括繪制事件),也是在這個(gè)主線程里,你的應(yīng)用和Android的UI組件發(fā)生交互。所以main thread也叫UI thread也即UI線程。系統(tǒng)不會(huì)為每個(gè)組件單
111、獨(dú)創(chuàng)建線程,在同一個(gè)進(jìn)程里的UI組件都會(huì)在UI線程里實(shí)例化,系統(tǒng)對(duì)每一個(gè)組件的調(diào)用都從UI線程分發(fā)出去。結(jié)果就是,響應(yīng)系統(tǒng)回調(diào)的方法,永遠(yuǎn)都是在UI線程里運(yùn)行。當(dāng)App做一些比較耗時(shí)的工作比如訪問網(wǎng)絡(luò)或者數(shù)據(jù)庫查詢,都會(huì)阻塞UI線程,導(dǎo)致事件停止分發(fā)(包括繪制事件)。對(duì)于用戶來說,應(yīng)用看起來像是卡住了。所以必須把所有的UI操作放在UI線程里。</p><p> 5.1.3 實(shí)現(xiàn)方法</p>&l
112、t;p> 在Android中,對(duì)于UI的操作通常需要放在主線程中進(jìn)行操作。如果在子線程中有關(guān)于UI的操作,那么就需要把數(shù)據(jù)消息作為一個(gè)Message對(duì)象發(fā)送到消息隊(duì)列中,然后,由Handler中的handlerMessage方法處理傳過來的數(shù)據(jù)信息,并操作UI。當(dāng)然,Handler對(duì)象是在主線程中初始化的,因?yàn)樗枰壎ㄔ谥骶€程的消息隊(duì)列中。</p><p> 類sendMessage(Message
113、msg)方法實(shí)現(xiàn)發(fā)送消息的操作。 在初始化Handler對(duì)象時(shí)重寫的handleMessage方法來接收Message并進(jìn)行相關(guān)操作。在每個(gè)按鈕按下之后,系統(tǒng)會(huì)發(fā)送不同的消息送給消息隊(duì)列,用以開始游戲或者退出游戲,在游戲開始后,如果玩家飛機(jī)死亡也會(huì)發(fā)送消息隊(duì)列從而進(jìn)入分?jǐn)?shù)統(tǒng)計(jì)界面。Handler運(yùn)行機(jī)制如圖5.1所示:</p><p> 圖5.1 Handler運(yùn)行機(jī)制</p><p>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于android的日歷系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)-畢業(yè)設(shè)計(jì)
- 基于android的益智游戲的設(shè)計(jì)與實(shí)現(xiàn)本科生畢業(yè)設(shè)計(jì)
- android畢業(yè)設(shè)計(jì)--基于android的音樂播放的設(shè)計(jì)與實(shí)現(xiàn)
- 畢業(yè)設(shè)計(jì)(論文)基于android的日歷系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
- 基于android平臺(tái)的飛機(jī)游戲畢業(yè)設(shè)計(jì)
- 基于android平臺(tái)的飛機(jī)游戲畢業(yè)設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)--基于android的視頻通話系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
- android游戲畢業(yè)設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)--基于android的無線點(diǎn)餐系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
- 畢業(yè)設(shè)計(jì)(論文)-基于android的五子棋游戲設(shè)計(jì)與實(shí)現(xiàn)
- 基于android的逃生游戲設(shè)計(jì)與實(shí)現(xiàn)-畢業(yè)論文
- 71695.基于android的畢業(yè)設(shè)計(jì)管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
- 基于android平臺(tái)的手機(jī)游戲開發(fā)【畢業(yè)設(shè)計(jì)】
- 基于android平臺(tái)的飛機(jī)游戲畢業(yè)設(shè)計(jì)x
- 畢業(yè)設(shè)計(jì)--基于android的雷電射擊游戲開發(fā)
- 基于android推箱子游戲的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)論文
- 基于android技術(shù)的中國(guó)象棋人機(jī)對(duì)弈游戲的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)論文
- 畢業(yè)設(shè)計(jì)——基于android系統(tǒng)的失物招領(lǐng)平臺(tái)的設(shè)計(jì)與實(shí)現(xiàn)
- 基于android平臺(tái)的酒店即時(shí)查詢系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)
- 基于java的掃雷游戲的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論