基于Android的益智游戲的設(shè)計(jì)與實(shí)現(xiàn)本科生畢業(yè)設(shè)計(jì).doc
《基于Android的益智游戲的設(shè)計(jì)與實(shí)現(xiàn)本科生畢業(yè)設(shè)計(jì).doc》由會(huì)員分享,可在線閱讀,更多相關(guān)《基于Android的益智游戲的設(shè)計(jì)與實(shí)現(xiàn)本科生畢業(yè)設(shè)計(jì).doc(38頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。
1、南陽理工學(xué)院本科生畢業(yè)設(shè)計(jì)(論文)基于Android的益智游戲的設(shè)計(jì)與實(shí)現(xiàn)Design and Research of Developmental game Based on Android總 計(jì):畢業(yè)設(shè)計(jì)(論文) 31頁表 格: 5個(gè)圖 片: 14個(gè)基于Android的益智游戲的設(shè)計(jì)與實(shí)現(xiàn)南 陽 理 工 學(xué) 院 本 科 畢 業(yè) 設(shè) 計(jì)(論文)基于Android的益智游戲的設(shè)計(jì)與實(shí)現(xiàn)Design and Research of Developmental game Based on Android南陽理工學(xué)院Nanyang Institute of Technology畢業(yè)設(shè)計(jì)(論文)原創(chuàng)性聲
2、明和使用授權(quán)說明原創(chuàng)性聲明本人鄭重承諾:所呈交的畢業(yè)設(shè)計(jì)(論文),是我個(gè)人在指導(dǎo)教師的指導(dǎo)下進(jìn)行的研究工作及取得的成果。盡我所知,除文中特別加以標(biāo)注和致謝的地方外,不包含其他人或組織已經(jīng)發(fā)表或公布過的研究成果,也不包含我為獲得 及其它教育機(jī)構(gòu)的學(xué)位或?qū)W歷而使用過的材料。對本研究提供過幫助和做出過貢獻(xiàn)的個(gè)人或集體,均已在文中作了明確的說明并表示了謝意。作 者 簽 名: 日 期: 指導(dǎo)教師簽名: 日期: 使用授權(quán)說明本人完全了解XX大學(xué)關(guān)于收集、保存、使用畢業(yè)設(shè)計(jì)(論文)的規(guī)定,即:按照學(xué)校要求提交畢業(yè)設(shè)計(jì)(論文)的印刷本和電子版本;學(xué)校有權(quán)保存畢業(yè)設(shè)計(jì)(論文)的印刷本和電子版,并提供目錄檢索與閱
3、覽服務(wù);學(xué)校可以采用影印、縮印、數(shù)字化或其它復(fù)制手段保存論文;在不以贏利為目的前提下,學(xué)??梢怨颊撐牡牟糠只蛉績?nèi)容。作者簽名: 日 期: 基于Android的益智游戲的設(shè)計(jì)與實(shí)現(xiàn)軟件工程 陳兵摘 要 在國內(nèi)外,android的前景十分廣闊,尤其是這個(gè)平臺(tái)的游戲開發(fā)更是前途不可限量。1976年Gremlin平臺(tái)推出了一款經(jīng)典街機(jī)游戲Blockade, 21年后諾基亞基于這個(gè)創(chuàng)意推出了世界上第一款最受歡迎的手機(jī)游戲貪吃蛇從而開啟了手機(jī)游戲發(fā)展之先河。發(fā)展到現(xiàn)在,3G手機(jī)游戲已經(jīng)成為當(dāng)今移動(dòng)游戲領(lǐng)域的主流,Android作為這個(gè)時(shí)代的弄潮兒正以燎原之勢蔓延開來。以仙劍為代表的手機(jī)RPG游戲已漸漸
4、退出舞臺(tái),現(xiàn)在老少皆宜的益智類游戲慢慢占據(jù)著主流,本論文研究的游戲正是這樣一款游戲,Q版的游戲畫面風(fēng)格和簡單易懂的操作適合于任何年齡段的玩家。航空帝國除采用Android平臺(tái)的四大組件,涉及到自定義View中畫圖的一些方法和技巧是本游戲的重點(diǎn),調(diào)用Android系統(tǒng)畫圖的API及自己實(shí)現(xiàn)的相應(yīng)算法,再加上漂亮的圖片足以實(shí)現(xiàn)幾乎任何炫酷的效果。有人說任何一個(gè)智能手機(jī)用戶都是一個(gè)潛在的游戲玩家,我想搭乘Android的順風(fēng)車,手機(jī)游戲開發(fā)必將大有作為。關(guān)鍵詞 Android;手機(jī)游戲;3G;益智類游戲;老少皆宜;Design and Research of Developmental game B
5、ased on AndroidSoftware Engineering MajorChen BingAbstract: At home and abroad,the Android has broad prospects,especially in the platform game developers is limitless.In 1976 the Gremlin platform launched a classic arcade game based on the Nokia Blockade,21 creative has launched the worlds first and
6、 most popular mobile phone game Snake,thereby opening the mobile phone game development of precedent.Until now,3G mobile phone games have become todays mobile phone game of the mainstream,Android as the era of beach-goers must borrow wind smooth bright.In “the immortal sword” as the representative o
7、f the mobile phone RPG game has gradually quit the stage,now occupying the main puzzle game slowly,this paper studies the game is just a game,Q version of the game screen style and simple and easy operation is stuitable for any age game player. Empire in addition to the Android platform air four com
8、ponents, involve custom View drawing some methods and techniques is the focus of the game, called Android system drawing of the API and realize the algorithm, combined with beautiful pictures to achieve virtually any cool effect. People say that any one of the intelligent mobile phone user is a pote
9、ntial game player, I want to take the Android ride, mobile phone game development will accomplish much.Key words: Mobile Phone Game;3G; Developmental game; yang and old;目 錄1 緒論11.1 背景11.2 Android的崛起11.3 國內(nèi)外研究現(xiàn)狀21.4 項(xiàng)目研究的主要內(nèi)容31.5 本章小結(jié)32 Android的開發(fā)環(huán)境32.1 Android操作系統(tǒng)32.2 Android開發(fā)環(huán)境32.3 Android開發(fā)環(huán)境變量的配
10、置32.3.1 JDK的配置32.3.2 SDK的配置52.4 Eclipse的配置52.5 本章小結(jié)63 Android應(yīng)用程序核心63.1 應(yīng)用程序基礎(chǔ)63.2 應(yīng)用程序組件73.2.1 Acitivity73.2.2 Service83.2.3 BroadcastReciver93.2.4 ContentProvider103.3 本章小結(jié)114 項(xiàng)目相關(guān)技術(shù)124.1 地圖的滑動(dòng)124.2 MusicPlayer134.3 本游戲的核心類GameEngine154.4 相關(guān)算法研究164.4.1 游戲資源進(jìn)度的加載164.4.2 郵件分頁顯示效果的實(shí)現(xiàn)174.4.3 玩家排名列表的實(shí)現(xiàn)
11、184.4.4 碰撞檢測184.4.5 按每行指定長度畫字符串184.4.6 根據(jù)一串連續(xù)的數(shù)字圖片,畫出任何數(shù)字194.4.7 圖片的翻轉(zhuǎn)和縮放204.5 本章小結(jié)205 系統(tǒng)測試與運(yùn)行效果截圖215.1 選擇方向界面215.2 游戲主界面215.2.1 人物信息225.2.2 音樂音效設(shè)置225.2.3 郵件列表225.2.4 照相235.2.5 商店信息235.2.6 飛機(jī)列表245.2.7 航班列表245.2.8 好友列表256 游戲基本數(shù)據(jù)256.1 飛機(jī)解鎖數(shù)據(jù)256.2 建筑解鎖數(shù)據(jù)266.3 機(jī)場解鎖數(shù)據(jù)266.4 飛機(jī)所有數(shù)據(jù)27結(jié)束語29參考文獻(xiàn)30致謝311 緒論1.1
12、背景3G(第三代數(shù)字通訊技術(shù))正離我們的生活越來越近,它的到來必將掀起一陣無線通訊的新浪潮,3G是向未來個(gè)人通信演進(jìn)的一個(gè)重要發(fā)展階段,具有里程碑和劃時(shí)代的意義。說到3G不能不談到Android,1Android是Google于2007年11月5日宣布的基于Linux平臺(tái)的開源手機(jī)操作系統(tǒng)。它包括一個(gè)操作系統(tǒng),中間件和一些重要的應(yīng)用程序。它采用軟件堆層(Software Stack,又名軟件疊層)的架構(gòu),主要分為三部分。底層以Linux內(nèi)核工作為基礎(chǔ),由C語言開發(fā),只提供基本功能;中間層包括函數(shù)庫Library和Dalvik虛擬機(jī),由C+開發(fā)。最上層是各種應(yīng)用軟件,包括通話程序,短信程序等,應(yīng)
13、用軟件則由各公司自行開發(fā),以Java作為編寫程序的一部分。不存在任何以往阻礙移動(dòng)產(chǎn)業(yè)創(chuàng)新的專有權(quán)障礙,號(hào)稱是首個(gè)為移動(dòng)終端打造的真正開放和完整的移動(dòng)軟件。這里,可以把a(bǔ)ndroid看作是一個(gè)類似于windows的操作系統(tǒng)。學(xué)習(xí)android平臺(tái)下的軟件開發(fā)正如以前學(xué)習(xí)windows平臺(tái)下的軟件開發(fā)一樣。1在國內(nèi),android的前景十分廣闊,國內(nèi)很多的廠商和運(yùn)營商也紛紛加入了android陣營,包括中國移動(dòng),中國聯(lián)通,華為通訊,聯(lián)想等大企業(yè)。同時(shí)android應(yīng)用的范圍不僅僅在手機(jī),國內(nèi)一些廠家也陸續(xù)推出了采用android系統(tǒng)的MID產(chǎn)品,比較著名的包括由Rockchip和藍(lán)魔推出的同時(shí)具備
14、高清播放和智能系統(tǒng)的音悅匯W7,我們可以預(yù)見android也將會(huì)被廣泛應(yīng)用在國產(chǎn)智能上網(wǎng)設(shè)備上,將進(jìn)一步擴(kuò)大Andorid系統(tǒng)的應(yīng)用范圍。1.2 Android的崛起【2】Android操作系統(tǒng)是Google最具殺傷力的武器之一。蘋果以其天才的創(chuàng)新,使得iphone在全球迅速擁有了數(shù)百萬忠實(shí)粉絲,而Android作為第一個(gè)完整的,開放,免費(fèi)的手機(jī)平臺(tái),使開發(fā)者在為其開發(fā)程序時(shí)擁有更大的自由。與Windows,Symbian等廠商不同的是,Android操作系統(tǒng)免費(fèi)向開發(fā)人員提供,這樣可節(jié)省近三成的成本,得到了眾多廠商和開發(fā)者的擁護(hù)?!?】最早進(jìn)入Android市場的宏達(dá)已經(jīng)陸續(xù)在一年內(nèi)推出了G
15、1,Magic,Hero,Tatto等4款手機(jī),三星也在2010年推出了Galaxyi7500,連摩托羅拉也推出了新款A(yù)ndroid手機(jī)Cliq,中國移動(dòng)也以Android為基礎(chǔ)開發(fā)了Ophone平臺(tái)。這些發(fā)展證明Android已成為只能手機(jī)市場的重要發(fā)展趨勢。32010年是android平臺(tái)飛速發(fā)展的一年。據(jù)報(bào)道顯示,2011年8月Android已占據(jù)了全球智能手機(jī)市場的半壁江山;而作為世界上零售領(lǐng)域最龐大的智能手機(jī)賣家蘋果公司,也以其iOS操作系統(tǒng)控制了五分之一的市場。換言之,Android和iOS加起來在全球智能手機(jī)市場上占據(jù)了三分之二的絕大多數(shù)市場份額。Android已經(jīng)在智能手機(jī)操作
16、系統(tǒng)上占據(jù)著主導(dǎo)地位。這不難解釋,畢竟這樣一個(gè)完全免費(fèi)并開放源代碼的平臺(tái)對于許多制造商來說都極具吸引力。包括HTC、Samsung、Acer、Sony Ericsson、LG、Motorola等等一系列廠商都對其投入了極大地關(guān)注和合作。3因此,2011年6月Google宣稱其每天激活50萬Android設(shè)備,我們對這一消息并不會(huì)感到十分吃驚。這一數(shù)據(jù)雖然也包括平板電腦在內(nèi),但即便是這樣,它也仍然非??捎^。它不僅僅顯示了Android在制造商和消費(fèi)者間的普及度,同時(shí)還標(biāo)志著智能手機(jī)正在成為如今社會(huì)不可缺少的一部分。Andy是一個(gè)有遠(yuǎn)見的人,早在2003年他就看到了Android2005年的起步和
17、被Google的收購,也看到了系統(tǒng)的進(jìn)步和新的機(jī)型的快速的發(fā)布。所有的這一切都讓我們相信,Android走向世界第一移動(dòng)操作系統(tǒng)的寶座的步伐是勢不可擋的,Android可能真的會(huì)繼續(xù)帶著我們走向移動(dòng)設(shè)備夢想的彼岸。1.3 國內(nèi)外研究現(xiàn)狀A(yù)ndroid 包括操作系統(tǒng)、用戶界面和應(yīng)用程序 移動(dòng)電話工作所需的全部軟件,而且不存在任何以往阻礙移動(dòng)產(chǎn)業(yè)創(chuàng)新的專有權(quán)障礙。Google與開放手機(jī)聯(lián)盟合作開發(fā)了 Android,這個(gè)聯(lián)盟由包括中國移動(dòng)、摩托羅拉、高通、宏達(dá)電和 T-Mobile 在內(nèi)的 30 多家技術(shù)和無線應(yīng)用的領(lǐng)軍企業(yè)組成。Google通過與運(yùn)營商、設(shè)備制造商、開發(fā)商和其他有關(guān)各方結(jié)成深層次
18、的合作伙伴關(guān)系,希望借助建立標(biāo)準(zhǔn)化、開放式的移動(dòng)電話軟件平臺(tái),在移動(dòng)產(chǎn)業(yè)內(nèi)形成一個(gè)開放式的生態(tài)系統(tǒng)?!?】Android 作為谷歌企業(yè)戰(zhàn)略的重要組成部分,將進(jìn)一步推進(jìn)隨時(shí)隨地為每個(gè)人提供信息這一企業(yè)目標(biāo)的實(shí)現(xiàn)。我們發(fā)現(xiàn),全球?yàn)閿?shù)眾多的移動(dòng)電話用戶從未使用過任何基于 Android 的電話。谷歌的目標(biāo)是讓(移動(dòng)通訊)不依賴于設(shè)備甚至平臺(tái)。出于這個(gè)目的,Android 將補(bǔ)充,而不會(huì)替代谷歌長期以來奉行的移動(dòng)發(fā)展戰(zhàn)略:通過與全球各地的手機(jī)制造商和移動(dòng)運(yùn)營商結(jié)成合作伙伴,開發(fā)既有用又有吸引力的移動(dòng)服務(wù),并推廣這些產(chǎn)品。【4】開放手機(jī)聯(lián)盟的成立和 Android 的推出是對現(xiàn)狀的重大改變,在帶來初步效
19、益之前,還需要不小的耐心和高昂的投入。但是,谷歌也在不斷努力,讓這些服務(wù)變得更好,同時(shí)也將添加更有吸引力的特性、應(yīng)用和服務(wù)。1.4 項(xiàng)目研究的主要內(nèi)容此游戲主要用到了Android用來畫圖的API,主類繼承view類,重寫其onDraw()方法并另起一個(gè)線程對主UI線程更新,實(shí)現(xiàn)整個(gè)游戲的動(dòng)態(tài)效果。其中自己寫了很多算法來實(shí)現(xiàn)一些炫酷的效果。游戲主體框架的構(gòu)思,分為8大部分: com.hkdg.animation用來存放游戲中所用到的對ani動(dòng)畫的初始化及播放的類。 com.hkdg.game主要用來存放從服務(wù)器解析過來的數(shù)據(jù),也包括讀取的本地?cái)?shù)據(jù)。 com.hkdg.game.Music用來存
20、放游戲中音樂,音效的初始化及播放的類。 com.hkdg.game.Object游戲中所用到的所有實(shí)體類存放在此。 com.hkdg.game.View游戲UI由若干自定義View組成,所有的View類存放于此。 com.hkdg.GameEngine此包中主要存放的是一個(gè)繼承了View的類,它另起了一個(gè)線程用來繪制界面,并同時(shí)更新主UI線程。 com.hkdg.Main這是一個(gè)存放著幾個(gè)Activity的包,游戲中為數(shù)不多的幾個(gè)activity都存放于此。 com.hkdg.tools這是一個(gè)存放著工具類的工具包。1.5 本章小結(jié)本章主要對Android的發(fā)展歷程以及對本游戲內(nèi)容進(jìn)行了簡單的
21、闡述,為Android開發(fā)者提供一個(gè)參考。2 Android的開發(fā)環(huán)境2.1 Android操作系統(tǒng)目前只支持XP(32-bit)、Vista(32/64-bit)、Mac OS X 10.4.8或更新版本(x86),Linux(只在Linux Ubuntu Dapper Drake上面做過測試)。 系統(tǒng)XP sp2/sp3 32bit 來做講解,其他系統(tǒng)的可以google一下差異,反正都大同小異的。2.2 Android開發(fā)環(huán)境建議使用eclipse進(jìn)行開發(fā),當(dāng)然,eclipse版本要在3.3以上,這是官方說法,3.3以下我也沒測過,3.3 (Europa)、3.4 (Ganymede) 都
22、可以java版本或者EE版本也都沒問題的,可以到eclipse官方下載最新版本。因?yàn)殚_發(fā)是基于java的,所以jdk是少不了的,jdk要求是5.0或者6.0,我還是用5.0比較多,可以到sun官方下載。2.3 Android開發(fā)環(huán)境變量的配置2.3.1 JDK的配置首先要到sun官方下載jdk,注意的是下載jdk而不是下載jre,因?yàn)閖re是提供java的運(yùn)行環(huán)境而不是開發(fā)環(huán)境。sun官方網(wǎng)站是:http:/ 下載后安裝是下的解壓包那就解壓到某目錄,例如解壓到是C:Program FilesJavajdk1.5.0_14 右鍵點(diǎn)擊我的電腦 - 屬性 - 高級,點(diǎn)擊下面的環(huán)境變量,在下面的“系統(tǒng)
23、變量”處選擇新建在變量名處輸入 JAVA_HOME變量值中輸入剛才的目錄,比如C:Program FilesJavajdk1.5.0_14 。效果如圖2-1所示:圖2-3-1-1 進(jìn)入環(huán)境變量確定后再新建一個(gè)變量名為classpath,變量值為 %JAVA_HOME%/lib/rt.jar;%JAVA_HOME%/lib/tools.jar , 確定后找到PATH的變量,雙擊或點(diǎn)擊編輯,在變量值最前面加上%JAVA_HOME%/bin; 注意里面的是,確定、確定、確定后即可。具體如下圖2-2所示圖2-3-1-2 環(huán)境變量的配置然后開始 - 運(yùn)行 cmd,輸入java或者javac看看有沒有效果
24、,如果出來一大堆其它的東西,那就好了,如果出現(xiàn)類似xxx不是內(nèi)部或者是外部命令之類的,那就說明你的設(shè)置有問題,看看那里出問題然后加以改正。2.3.2 SDK的配置因?yàn)槲覀円_發(fā)的android應(yīng)用程序,所以下的sdk是Google那里下載,地址在http:/ 以后更新后估計(jì)地址會(huì)變,所以大家可以從http:/ 然后同樣要設(shè)置環(huán)境變量,同jdk設(shè)置,新建一個(gè)SDK_HOME,值為D:SDKandroid-sdk-windows-1.5_r3android-sdk-windows-1.5_r3 ,然后找到path,在前面加上%SDK_HOME%tools; 就OK了。和jdk一樣,我們也可以測試一
25、下環(huán)境變量是否設(shè)置成功,cmd窗口中輸入android,出現(xiàn)一堆東西,就完成了。2.4 Eclipse的配置當(dāng)然,以上都搞定后,還不能馬上用eclipse開發(fā)android應(yīng)用程序,還必須添加eclipse插件才行,幸好這步驟非常輕松,打開eclipse后,點(diǎn)擊菜單欄的help - install new software. 然后點(diǎn)擊Add會(huì)出來一個(gè)Add Site的窗口,這里Name輸入android(自己取個(gè)就是了),location中輸入插件的網(wǎng)絡(luò)地址: https:/dl- DDMS 和 Android Development Tools都選中,finish就可以了,可能有段時(shí)間會(huì)去計(jì)
26、算插件占用資源情況,慢慢等會(huì)。完成后會(huì)提示重啟eclipse來加載插件,ok重啟,就可以用了。2.5 本章小結(jié)本章將主要介紹如何構(gòu)建Android開發(fā)環(huán)境,包括獲取Android SDK、Eclipse以及進(jìn)行Android Eclipse插件設(shè)置等。3 Android應(yīng)用程序核心3.1 應(yīng)用程序基礎(chǔ)Android的應(yīng)用程序全部都是用Java編程語言所寫的。編譯后的Java代碼包括應(yīng)用程序要求的任何數(shù)據(jù)和資源文件,是通過aapt工具捆綁成一個(gè)Android包,歸檔文件是以.apk為后綴。這個(gè)文件是分發(fā)應(yīng)用程序和安裝到移動(dòng)設(shè)備的中介或者是工具,用戶下載這個(gè)文件到他們自己的設(shè)備上。一個(gè).apk文件
27、中的所有代碼就會(huì)被認(rèn)為是一個(gè)應(yīng)用程序。 aapt是Android Asset Packaging Tool的首寫字母的縮寫,這個(gè)工具包是含在SDK的tools/目錄下的。查看、創(chuàng)建、更新與zip兼容的歸檔文件(zip、jar、apk)。它也能將資源文件編譯成二進(jìn)制包。 雖然你可能不會(huì)經(jīng)常直接使用appt,但構(gòu)建腳本(build scripts)和IDE插件會(huì)使用這個(gè)工具打包成apk文件,構(gòu)成一個(gè)Android的應(yīng)用程序。 下面是更詳細(xì)的使用細(xì)節(jié),5首先打開一個(gè)終端,進(jìn)入tools/目錄下,運(yùn)行命令: Linux或Mac操作系統(tǒng):./aapt ,如果是Windows:aapt.exe 。在這里注
28、意的是:tools/目錄指的是android SDK目錄下的/platforms/android-X/tools/。在很多的方面,每個(gè)Android的應(yīng)用程序是生活在它自己的世界。默認(rèn)的情況下,任何一個(gè)應(yīng)用程序是運(yùn)行在它自己的Linux進(jìn)程中。而當(dāng)應(yīng)用程序中的任何代碼需要被執(zhí)行時(shí)候,Android將啟動(dòng)進(jìn)程;當(dāng)它不再需要和系統(tǒng)資源不會(huì)被其他應(yīng)用程序所請求時(shí),Android就會(huì)關(guān)閉這個(gè)進(jìn)程。每一個(gè)應(yīng)用程序都有自己的Java虛擬機(jī)(VM),所以應(yīng)用程序的代碼是獨(dú)立于其他所有的應(yīng)用程序代碼的運(yùn)行。在默認(rèn)情況下,每一個(gè)應(yīng)用程序分配一個(gè)唯一的Linux用戶ID。權(quán)限被設(shè)置為每一個(gè)應(yīng)用程序的文件僅對用戶和
29、應(yīng)用程序自己本身可見。雖然有一些方法也可以暴露他們給其他應(yīng)用程序。也有可能的是設(shè)置兩個(gè)應(yīng)用程序共享一個(gè)用戶ID,這種情況下,他們能夠看到對方的文件。為了節(jié)省系統(tǒng)資源的占用,具有相同ID的應(yīng)用程序最好可以安排在同一個(gè)Linux進(jìn)程中,共享同一個(gè)VM。53.2 應(yīng)用程序組件3.2.1 AcitivityActivity是Android組件中最基本也是最為常見的組件,在一個(gè)Android應(yīng)用中,一個(gè)Activity通常就是一個(gè)單獨(dú)的屏幕。當(dāng)Activity從一種狀態(tài)轉(zhuǎn)變到另一種狀態(tài)時(shí),會(huì)調(diào)用以下保護(hù)方法來通知這種變化:void onCreate(Bundle savedInstanceState)v
30、oid onStart()void onRestart()void onResume()void onPause()void onStop()void onDestroy()【6】下圖為Activity的生命周期圖示:圖3-2-1 Activity的生命周期圖示6在實(shí)現(xiàn) Activity 類的時(shí)候,通過覆蓋( override )這些方法即可在你需要處理的時(shí)候來調(diào)用。onCreate :當(dāng)活動(dòng)第一次啟動(dòng)的時(shí)候,觸發(fā)該方法,可以在此時(shí)完成活動(dòng)的初始化工作。onCreate 方法有一個(gè)參數(shù),該參數(shù)可以為空( null ),也可以是之前調(diào)用onSaveInstanceState ()方法保存的狀態(tài)信
31、息。onStart :該方法的觸發(fā)表示所屬活動(dòng)將被展現(xiàn)給用戶。onResume :當(dāng)一個(gè)活動(dòng)和用戶發(fā)生交互的時(shí)候,觸發(fā)該方法。onPause :當(dāng)一個(gè)正在前臺(tái)運(yùn)行的活動(dòng)因?yàn)槠渌幕顒?dòng)需要前臺(tái)運(yùn)行而轉(zhuǎn)入后臺(tái)運(yùn)行的時(shí)候,觸發(fā)該方法。這時(shí)候需要將活動(dòng)的狀態(tài)持久化,比如正在編輯的數(shù)據(jù)庫記錄等。onStop :當(dāng)一個(gè)活動(dòng)不再需要展示給用戶的時(shí)候,觸發(fā)該方法。如果內(nèi)存緊張,系統(tǒng)會(huì)直接結(jié)束這個(gè)活動(dòng),而不會(huì)觸發(fā) onStop 方法。 所以保存狀態(tài)信息是應(yīng)該在onPause時(shí)做,而不是onStop時(shí)做?;顒?dòng)如果沒有在前臺(tái)運(yùn)行,都將被停止或者Linux管理進(jìn)程為了給新的活動(dòng)預(yù)留足夠的存儲(chǔ)空間而隨時(shí)結(jié)束這些活動(dòng)。因
32、此對于開發(fā)者來說,在設(shè)計(jì)應(yīng)用程序的時(shí)候,必須時(shí)刻牢記這一原則。在一些情況下,onPause方法或許是活動(dòng)觸發(fā)的最后的方法,因此開發(fā)者需要在這個(gè)時(shí)候保存需要保存的信息。onRestart :當(dāng)處于停止?fàn)顟B(tài)的活動(dòng)需要再次展現(xiàn)給用戶的時(shí)候,觸發(fā)該方法。onDestroy :當(dāng)活動(dòng)銷毀的時(shí)候,觸發(fā)該方法。和onStop 方法一樣,如果內(nèi)存緊張,系統(tǒng)會(huì)直接結(jié)束這個(gè)活動(dòng)而不會(huì)觸發(fā)該方法。onSaveInstanceState :系統(tǒng)調(diào)用該方法,允許活動(dòng)保存之前的狀態(tài),比如說在一串字符串中的光標(biāo)所處的位置等。通常情況下,開發(fā)者不需要重寫覆蓋該方法,在默認(rèn)的實(shí)現(xiàn)中,已經(jīng)提供了自動(dòng)保存活動(dòng)所涉及到的用戶界面組件
33、的所有狀態(tài)信息。3.2.2 ServiceService是一種長生命周期,沒有用戶界面的程序。Service是android 系統(tǒng)中的一種組件,它跟Activity的級別差不多,但是他不能自己運(yùn)行,只能后臺(tái)運(yùn)行,并且可以和其他組件進(jìn)行交互。Service的啟動(dòng)有兩種方式:context.startService()和context.bindService()?!?】使用context.startService() 啟動(dòng)Service是會(huì)經(jīng)歷:context.startService() -onCreate()- onStart()-Service running context.stopSer
34、vice() | -onDestroy() -Service stop如果Service還沒有運(yùn)行,則android先調(diào)用onCreate()然后調(diào)用onStart();如果Service已經(jīng)運(yùn)行,則只調(diào)用onStart(),所以一個(gè)Service的onStart方法可能會(huì)重復(fù)調(diào)用多次。stopService的時(shí)候直接onDestroy,如果是調(diào)用者自己直接退出而沒有調(diào)用stopService的話,Service會(huì)一直在后臺(tái)運(yùn)行。該Service的調(diào)用者再啟動(dòng)起來后可以通過stopService關(guān)閉Service。 所以調(diào)用startService的生命周期為:onCreate - onSta
35、rt(可多次調(diào)用) - onDestroy 使用使用context.bindService()啟動(dòng)Service會(huì)經(jīng)歷: context.bindService()-onCreate()-onBind()-Service running onUnbind() -onDestroy() -Service stop onBind將返回給客戶端一個(gè)IBind接口實(shí)例,IBind允許客戶端回調(diào)服務(wù)的方法,比如得到Service運(yùn)行的狀態(tài)或其他操作。這個(gè)時(shí)候把調(diào)用者(Context,例如Activity)會(huì)和Service綁定在一起,Context退出了,Srevice就會(huì)調(diào)用onUnbind-onDe
36、stroy相應(yīng)退出。所以調(diào)用bindService的生命周期為:onCreate - onBind(只一次,不可多次綁定) - onUnbind - onDestory。在Service每一次的開啟關(guān)閉過程中,只有onStart可被多次調(diào)用(通過多次startService調(diào)用),其他onCreate,onBind,onUnbind,onDestory在一個(gè)生命周期中只能被調(diào)用一次。service可以在和多場合的應(yīng)用中使用,比如播放多媒體的時(shí)候用戶啟動(dòng)了其他Activity這個(gè)時(shí)候程序要在后臺(tái)繼續(xù)播放,比如檢測SD卡上文件的變化,再或者在后臺(tái)記錄你地理信息位置的改變等等,總之服務(wù)嘛,總是藏在后
37、頭的?!?】3.2.3 BroadcastReciverBrodcastReciver是為了實(shí)現(xiàn)系統(tǒng)廣播而提供的組件。在android下,要想接受廣播信息,那么這個(gè)廣播接收器就得我們自己來實(shí)現(xiàn)了,我們可以繼承BroadcastReceiver,就可以有一個(gè)廣播接受器了。有個(gè)接受器還不夠,我們還得重寫B(tài)roadcastReceiver里面的onReceiver方法,當(dāng)來廣播的時(shí)候我們要干什么,這就要我們自己來實(shí)現(xiàn)。具體的代碼:public class SmsBroadCastReceiver extends BroadcastReceiver Override public void onRec
38、eive(Context context, Intent intent) Bundle bundle = intent.getExtras(); /這里寫你要做的事情 我們可以把廣播接收器注冊到系統(tǒng)里面,可以讓系統(tǒng)知道我們有個(gè)廣播接收器。這里有兩種,一種是代碼動(dòng)態(tài)注冊:/生成廣播處理 smsBroadCastReceiver = new SmsBroadCastReceiver(); /實(shí)例化過濾器并設(shè)置要過濾的廣播 IntentFilter intentFilter = new IntentFilter(android.provider.Telephony.SMS_RECEIVED); /注
39、冊廣播 BroadCastReceiverActivity.this.registerReceiver(smsBroadCastReceiver, intentFilter); /onDestroy要注銷廣播 調(diào)用unregisterReceiver(.)函數(shù); 一種是在AndroidManifest.xml中配置廣播 兩種注冊類型的區(qū)別是:1)第一種不是常駐型廣播,也就是說廣播跟隨程序的生命周期。2)第二種是常駐型,也就是說當(dāng)應(yīng)用程序關(guān)閉后,如果有信息廣播來,程序也會(huì)被系統(tǒng)調(diào)用自動(dòng)運(yùn)行。3.2.4 ContentProviderContentProvider可以實(shí)現(xiàn)不同組件之間的數(shù)據(jù)共享。C
40、ontentProvider:為存儲(chǔ)和獲取數(shù)據(jù)提供統(tǒng)一的接口。可以在不同的應(yīng)用程序之間共享數(shù)據(jù)。Android已經(jīng)為常見的一些數(shù)據(jù)提供了默認(rèn)的ContentProvider1、ContentProvider使用表的形式來組織數(shù)據(jù) 無論數(shù)據(jù)的來源是什么,ContentProvider都會(huì)認(rèn)為是一種表,然后把數(shù)據(jù)組織成表格2、ContentProvider提供的方法 query:查詢 insert:插入 update:更新 delete:刪除 getType:得到數(shù)據(jù)類型 onCreate:創(chuàng)建數(shù)據(jù)時(shí)調(diào)用的回調(diào)函數(shù)3、每個(gè)ContentProvider都有一個(gè)公共的URI,這個(gè)URI用于表示這個(gè)C
41、ontentProvider所提供的數(shù)據(jù)。Android所提供的ContentProvider都存放在android.provider包當(dāng)中二、ContentProvider的內(nèi)部原理自定義一個(gè)ContentProvider,來實(shí)現(xiàn)內(nèi)部原理步驟:1、定義一個(gè)CONTENT_URI常量(里面的字符串必須是唯一)Public static final Uri CONTENT_URI = Uri.parse(content:/com.WangWeiDa.MyContentprovider);如果有子表,URI為:Public static final Uri CONTENT_URI = Uri.pa
42、rse(content:/com.WangWeiDa.MyContentProvider/users);2、定義一個(gè)類,繼承ContentProviderPublic class MyContentProvider extends ContentProvider3、實(shí)現(xiàn)ContentProvider的所有方法(query、insert、update、delete、getType、onCreate)4、在AndroidMinifest.xml中進(jìn)行聲明 android:name=.cp.MyContentProvider android:authorities=com.WangWeiDa.cp.
43、MyContentProvider /3.3 本章小結(jié)本章將會(huì)詳細(xì)敘述Android的應(yīng)用程序所包括的基本組件,還有這些組件之間的溝通方式Intent(除了Contentprovider),同時(shí)講解一下Android應(yīng)用程序的生命周期(Activity)這是其他智能收與Android手機(jī)平臺(tái)最顯著不同的地方。最后將介紹在Android的應(yīng)用程序中如何利用下載外部資源。4 項(xiàng)目相關(guān)技術(shù)4.1 地圖的滑動(dòng)地圖的滑動(dòng)我是分兩步實(shí)現(xiàn):1. 重寫Activity的onFling()方法,用來判斷用戶手指滑動(dòng)的方向。onFling()是Android手勢中用來接收快速滑動(dòng)的方法,要實(shí)現(xiàn)這樣一個(gè)滑動(dòng)效果需要
44、一下四步, 否則失效。 【8】寫一個(gè)類,實(shí)現(xiàn)OnGestureListener, OnTouchListener接口。重寫里面的方法,記得把onDown()方法return true;這樣才能觸發(fā)onFling事件。 (2) 設(shè)置layout的onTouch事件: LinearLayout layout = (LinearLayout) findViewById(R.id.mylayout); layout.setOnTouchListener(this);(3) 在touch時(shí)調(diào)用如下: 在onTouch方法中return detector.onTouchEvent(event); /其中d
45、etector是:GestureDetector detector = new GestureDetector(this); (4)寫onFling()方法: public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) if(e1.getX() - e2.getX() 50 & Math.abs(velocityX)0) System.out.println(Left.);/向左滑動(dòng) else if(e2.getX()-e1.getX()50 & Math.abs(veloci
46、tyX)0) System.out.println(Right.);/向右滑動(dòng) return false; 【8】在本項(xiàng)目中的HKDGActivity的onFling()方法中我是直接調(diào)用了GameEngine的onFling()方法:Overridepublic boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,float velocityY) / TODO Auto-generated method stub/Toast.makeText(this, onFling, Toast.LENGTH_SHORT).sh
47、ow();return _ge.onFling(e1, e2, velocityX, velocityY);2. 重寫Activity的onScroll()方法,用來控制圖片的移動(dòng)。Overridepublic boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,float distanceY) / TODO Auto-generated method stubreturn _ge.onScroll(e1, e2, distanceX, distanceY);4.2 MusicPlayer這是一個(gè)自己封裝的類,用來播
48、放游戲中的音樂。里面封裝了一個(gè)MediaPlayer對象及幾個(gè)對音樂文件進(jìn)行操作的方法。MediaPlayer類可用于控制音頻/視頻文件或流的播放, 對播放音頻/視頻文件和流的控制是通過一個(gè)狀態(tài)機(jī)來管理的,如下圖所示:9圖4-2 MediaPlayer的狀態(tài)機(jī)制9public class Music private Context _context;private MediaPlayer _meMediaPlayer;private boolean _isMute=false;public Music(Context context) _context = context;_meMediaPl
49、ayer = new MediaPlayer();public void initMusic(int resID) _meMediaPlayer = MediaPlayer.create(_context, resID);public void initMusic(String path) try AssetManager assetManager = _context.getAssets();AssetFileDescriptor afd = assetManager.openFd(path);_meMediaPlayer.reset();_meMediaPlayer.setDataSour
50、ce(afd.getFileDescriptor(), afd.getStartOffset(), afd.getDeclaredLength(); catch (IllegalArgumentException e) / TODO Auto-generated catch blocke.printStackTrace(); catch (IllegalStateException e) / TODO Auto-generated catch blocke.printStackTrace(); catch (IOException e) / TODO Auto-generated catch
51、blocke.printStackTrace();public void playMusic() if (!_meMediaPlayer.isPlaying()|!_isMute) try _meMediaPlayer.prepare();_meMediaPlayer.start();setLoop(true); catch (IllegalStateException e) / TODO Auto-generated catch blocke.printStackTrace(); catch (IOException e) / TODO Auto-generated catch blocke
52、.printStackTrace();public void setLoop(boolean isloop) _meMediaPlayer.setLooping(isloop);public void setMute(boolean setMute) _isMute = setMute;public void setMusicVolum(int Volume) _meMediaPlayer.setVolume(Volume, Volume);public void stop() if (_meMediaPlayer.isPlaying()|!_isMute) _meMediaPlayer.st
53、op();public void pause() if (_meMediaPlayer.isPlaying()|!_isMute) _meMediaPlayer.pause();public Boolean isPlaying()return _meMediaPlayer.isPlaying();public void releaseMusic() _meMediaPlayer.stop();_meMediaPlayer.reset();_meMediaPlayer.release();_meMediaPlayer=null;4.3 本游戲的核心類GameEngine如果說整個(gè)游戲是一架飛機(jī),
54、那么GameEngine絕對是這個(gè)飛機(jī)的引擎。其他所有的類是這架飛機(jī)大大小小的零件,部件。他們之間通過種種設(shè)計(jì)模式也就是飛機(jī) 的鋼筋骨架連接起來,成為一架完整的飛機(jī)。而這架飛機(jī)最終翱翔天空,GameEngine提供了核心動(dòng)力。首先這個(gè)類繼承了View,而這個(gè)自定義的View就是我們游戲的界面。因此我們可以在這個(gè)View里面重寫其onDraw()方法來畫出炫麗的游戲界面。protected void onDraw(Canvas canvas) if (paint = null) paint = new Paint();paint.setColor(android.R.color.black);c
55、anvas.drawRect(0, 0, this.getWidth(), this.getHeight(), paint);if(ispaint)if (getPage() != null) getPage().paint(canvas,mPaint);if (_screenState != SCREEN_NORMAL) paint2.setColor(android.R.color.black);paint2.setAlpha(alphaSize);canvas.drawRect(0, 0, this.getWidth(), this.getHeight(), paint2);然后,這個(gè)類
56、實(shí)現(xiàn)了Runable接口,在這個(gè)View里面重新啟動(dòng)了一個(gè)線程用來驅(qū)動(dòng)整個(gè)游戲的運(yùn)行。/ the thread controllerpublic void run() long start, cost;while (mBLoop) start = System.currentTimeMillis();try cost = System.currentTimeMillis() - start;start = this.sleepSlice - cost;if (start 0) try logic();Thread.sleep(start); catch (Exception e) e.printStackTrace(); catch (Exception e) e.printStackTrace();this.postInvalidate(); / refurbish the screen最后,
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 6.煤礦安全生產(chǎn)科普知識(shí)競賽題含答案
- 2.煤礦爆破工技能鑒定試題含答案
- 3.爆破工培訓(xùn)考試試題含答案
- 2.煤礦安全監(jiān)察人員模擬考試題庫試卷含答案
- 3.金屬非金屬礦山安全管理人員(地下礦山)安全生產(chǎn)模擬考試題庫試卷含答案
- 4.煤礦特種作業(yè)人員井下電鉗工模擬考試題庫試卷含答案
- 1 煤礦安全生產(chǎn)及管理知識(shí)測試題庫及答案
- 2 各種煤礦安全考試試題含答案
- 1 煤礦安全檢查考試題
- 1 井下放炮員練習(xí)題含答案
- 2煤礦安全監(jiān)測工種技術(shù)比武題庫含解析
- 1 礦山應(yīng)急救援安全知識(shí)競賽試題
- 1 礦井泵工考試練習(xí)題含答案
- 2煤礦爆破工考試復(fù)習(xí)題含答案
- 1 各種煤礦安全考試試題含答案