基于Android的益智游戲的設(shè)計(jì)與實(shí)現(xiàn)本科生畢業(yè)設(shè)計(jì).doc
《基于Android的益智游戲的設(shè)計(jì)與實(shí)現(xiàn)本科生畢業(yè)設(shè)計(jì).doc》由會(huì)員分享,可在線(xiàn)閱讀,更多相關(guān)《基于Android的益智游戲的設(shè)計(jì)與實(shí)現(xiàn)本科生畢業(yè)設(shè)計(jì).doc(38頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、南陽(yáng)理工學(xué)院本科生畢業(yè)設(shè)計(jì)(論文)基于Android的益智游戲的設(shè)計(jì)與實(shí)現(xiàn)Design and Research of Developmental game Based on Android總 計(jì):畢業(yè)設(shè)計(jì)(論文) 31頁(yè)表 格: 5個(gè)圖 片: 14個(gè)基于Android的益智游戲的設(shè)計(jì)與實(shí)現(xiàn)南 陽(yáng) 理 工 學(xué) 院 本 科 畢 業(yè) 設(shè) 計(jì)(論文)基于Android的益智游戲的設(shè)計(jì)與實(shí)現(xiàn)Design and Research of Developmental game Based on Android南陽(yáng)理工學(xué)院Nanyang Institute of Technology畢業(yè)設(shè)計(jì)(論文)原創(chuàng)性聲
2、明和使用授權(quán)說(shuō)明原創(chuàng)性聲明本人鄭重承諾:所呈交的畢業(yè)設(shè)計(jì)(論文),是我個(gè)人在指導(dǎo)教師的指導(dǎo)下進(jìn)行的研究工作及取得的成果。盡我所知,除文中特別加以標(biāo)注和致謝的地方外,不包含其他人或組織已經(jīng)發(fā)表或公布過(guò)的研究成果,也不包含我為獲得 及其它教育機(jī)構(gòu)的學(xué)位或?qū)W歷而使用過(guò)的材料。對(duì)本研究提供過(guò)幫助和做出過(guò)貢獻(xiàn)的個(gè)人或集體,均已在文中作了明確的說(shuō)明并表示了謝意。作 者 簽 名: 日 期: 指導(dǎo)教師簽名: 日期: 使用授權(quán)說(shuō)明本人完全了解XX大學(xué)關(guān)于收集、保存、使用畢業(yè)設(shè)計(jì)(論文)的規(guī)定,即:按照學(xué)校要求提交畢業(yè)設(shè)計(jì)(論文)的印刷本和電子版本;學(xué)校有權(quán)保存畢業(yè)設(shè)計(jì)(論文)的印刷本和電子版,并提供目錄檢索與閱
3、覽服務(wù);學(xué)??梢圆捎糜坝?、縮印、數(shù)字化或其它復(fù)制手段保存論文;在不以贏利為目的前提下,學(xué)??梢怨颊撐牡牟糠只蛉?jī)?nèi)容。作者簽名: 日 期: 基于Android的益智游戲的設(shè)計(jì)與實(shí)現(xiàn)軟件工程 陳兵摘 要 在國(guó)內(nèi)外,android的前景十分廣闊,尤其是這個(gè)平臺(tái)的游戲開(kāi)發(fā)更是前途不可限量。1976年Gremlin平臺(tái)推出了一款經(jīng)典街機(jī)游戲Blockade, 21年后諾基亞基于這個(gè)創(chuàng)意推出了世界上第一款最受歡迎的手機(jī)游戲貪吃蛇從而開(kāi)啟了手機(jī)游戲發(fā)展之先河。發(fā)展到現(xiàn)在,3G手機(jī)游戲已經(jīng)成為當(dāng)今移動(dòng)游戲領(lǐng)域的主流,Android作為這個(gè)時(shí)代的弄潮兒正以燎原之勢(shì)蔓延開(kāi)來(lái)。以仙劍為代表的手機(jī)RPG游戲已漸漸
4、退出舞臺(tái),現(xiàn)在老少皆宜的益智類(lèi)游戲慢慢占據(jù)著主流,本論文研究的游戲正是這樣一款游戲,Q版的游戲畫(huà)面風(fēng)格和簡(jiǎn)單易懂的操作適合于任何年齡段的玩家。航空帝國(guó)除采用Android平臺(tái)的四大組件,涉及到自定義View中畫(huà)圖的一些方法和技巧是本游戲的重點(diǎn),調(diào)用Android系統(tǒng)畫(huà)圖的API及自己實(shí)現(xiàn)的相應(yīng)算法,再加上漂亮的圖片足以實(shí)現(xiàn)幾乎任何炫酷的效果。有人說(shuō)任何一個(gè)智能手機(jī)用戶(hù)都是一個(gè)潛在的游戲玩家,我想搭乘Android的順風(fēng)車(chē),手機(jī)游戲開(kāi)發(fā)必將大有作為。關(guān)鍵詞 Android;手機(jī)游戲;3G;益智類(lèi)游戲;老少皆宜;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 國(guó)內(nèi)外研究現(xiàn)狀21.4 項(xiàng)目研究的主要內(nèi)容31.5 本章小結(jié)32 Android的開(kāi)發(fā)環(huán)境32.1 Android操作系統(tǒng)32.2 Android開(kāi)發(fā)環(huán)境32.3 Android開(kāi)發(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 本游戲的核心類(lèi)GameEngine154.4 相關(guān)算法研究164.4.1 游戲資源進(jìn)度的加載164.4.2 郵件分頁(yè)顯示效果的實(shí)現(xiàn)174.4.3 玩家排名列表的實(shí)現(xiàn)
11、184.4.4 碰撞檢測(cè)184.4.5 按每行指定長(zhǎng)度畫(huà)字符串184.4.6 根據(jù)一串連續(xù)的數(shù)字圖片,畫(huà)出任何數(shù)字194.4.7 圖片的翻轉(zhuǎn)和縮放204.5 本章小結(jié)205 系統(tǒng)測(cè)試與運(yùn)行效果截圖215.1 選擇方向界面215.2 游戲主界面215.2.1 人物信息225.2.2 音樂(lè)音效設(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ī)場(chǎng)解鎖數(shù)據(jù)266.4 飛機(jī)所有數(shù)據(jù)27結(jié)束語(yǔ)29參考文獻(xiàn)30致謝311 緒論1.1
12、背景3G(第三代數(shù)字通訊技術(shù))正離我們的生活越來(lái)越近,它的到來(lái)必將掀起一陣無(wú)線(xiàn)通訊的新浪潮,3G是向未來(lái)個(gè)人通信演進(jìn)的一個(gè)重要發(fā)展階段,具有里程碑和劃時(shí)代的意義。說(shuō)到3G不能不談到Android,1Android是Google于2007年11月5日宣布的基于Linux平臺(tái)的開(kāi)源手機(jī)操作系統(tǒng)。它包括一個(gè)操作系統(tǒng),中間件和一些重要的應(yīng)用程序。它采用軟件堆層(Software Stack,又名軟件疊層)的架構(gòu),主要分為三部分。底層以L(fǎng)inux內(nèi)核工作為基礎(chǔ),由C語(yǔ)言開(kāi)發(fā),只提供基本功能;中間層包括函數(shù)庫(kù)Library和Dalvik虛擬機(jī),由C+開(kāi)發(fā)。最上層是各種應(yīng)用軟件,包括通話(huà)程序,短信程序等,應(yīng)
13、用軟件則由各公司自行開(kāi)發(fā),以Java作為編寫(xiě)程序的一部分。不存在任何以往阻礙移動(dòng)產(chǎn)業(yè)創(chuàng)新的專(zhuān)有權(quán)障礙,號(hào)稱(chēng)是首個(gè)為移動(dòng)終端打造的真正開(kāi)放和完整的移動(dòng)軟件。這里,可以把a(bǔ)ndroid看作是一個(gè)類(lèi)似于windows的操作系統(tǒng)。學(xué)習(xí)android平臺(tái)下的軟件開(kāi)發(fā)正如以前學(xué)習(xí)windows平臺(tái)下的軟件開(kāi)發(fā)一樣。1在國(guó)內(nèi),android的前景十分廣闊,國(guó)內(nèi)很多的廠商和運(yùn)營(yíng)商也紛紛加入了android陣營(yíng),包括中國(guó)移動(dòng),中國(guó)聯(lián)通,華為通訊,聯(lián)想等大企業(yè)。同時(shí)android應(yīng)用的范圍不僅僅在手機(jī),國(guó)內(nèi)一些廠家也陸續(xù)推出了采用android系統(tǒng)的MID產(chǎn)品,比較著名的包括由Rockchip和藍(lán)魔推出的同時(shí)具備
14、高清播放和智能系統(tǒng)的音悅匯W7,我們可以預(yù)見(jiàn)android也將會(huì)被廣泛應(yīng)用在國(guó)產(chǎn)智能上網(wǎng)設(shè)備上,將進(jìn)一步擴(kuò)大Andorid系統(tǒng)的應(yīng)用范圍。1.2 Android的崛起【2】Android操作系統(tǒng)是Google最具殺傷力的武器之一。蘋(píng)果以其天才的創(chuàng)新,使得iphone在全球迅速擁有了數(shù)百萬(wàn)忠實(shí)粉絲,而Android作為第一個(gè)完整的,開(kāi)放,免費(fèi)的手機(jī)平臺(tái),使開(kāi)發(fā)者在為其開(kāi)發(fā)程序時(shí)擁有更大的自由。與Windows,Symbian等廠商不同的是,Android操作系統(tǒng)免費(fèi)向開(kāi)發(fā)人員提供,這樣可節(jié)省近三成的成本,得到了眾多廠商和開(kāi)發(fā)者的擁護(hù)。【2】最早進(jìn)入Android市場(chǎng)的宏達(dá)已經(jīng)陸續(xù)在一年內(nèi)推出了G
15、1,Magic,Hero,Tatto等4款手機(jī),三星也在2010年推出了Galaxyi7500,連摩托羅拉也推出了新款A(yù)ndroid手機(jī)Cliq,中國(guó)移動(dòng)也以Android為基礎(chǔ)開(kāi)發(fā)了Ophone平臺(tái)。這些發(fā)展證明Android已成為只能手機(jī)市場(chǎng)的重要發(fā)展趨勢(shì)。32010年是android平臺(tái)飛速發(fā)展的一年。據(jù)報(bào)道顯示,2011年8月Android已占據(jù)了全球智能手機(jī)市場(chǎng)的半壁江山;而作為世界上零售領(lǐng)域最龐大的智能手機(jī)賣(mài)家蘋(píng)果公司,也以其iOS操作系統(tǒng)控制了五分之一的市場(chǎng)。換言之,Android和iOS加起來(lái)在全球智能手機(jī)市場(chǎng)上占據(jù)了三分之二的絕大多數(shù)市場(chǎng)份額。Android已經(jīng)在智能手機(jī)操作
16、系統(tǒng)上占據(jù)著主導(dǎo)地位。這不難解釋?zhuān)吘惯@樣一個(gè)完全免費(fèi)并開(kāi)放源代碼的平臺(tái)對(duì)于許多制造商來(lái)說(shuō)都極具吸引力。包括HTC、Samsung、Acer、Sony Ericsson、LG、Motorola等等一系列廠商都對(duì)其投入了極大地關(guān)注和合作。3因此,2011年6月Google宣稱(chēng)其每天激活50萬(wàn)Android設(shè)備,我們對(duì)這一消息并不會(huì)感到十分吃驚。這一數(shù)據(jù)雖然也包括平板電腦在內(nèi),但即便是這樣,它也仍然非??捎^。它不僅僅顯示了Android在制造商和消費(fèi)者間的普及度,同時(shí)還標(biāo)志著智能手機(jī)正在成為如今社會(huì)不可缺少的一部分。Andy是一個(gè)有遠(yuǎn)見(jiàn)的人,早在2003年他就看到了Android2005年的起步和
17、被Google的收購(gòu),也看到了系統(tǒng)的進(jìn)步和新的機(jī)型的快速的發(fā)布。所有的這一切都讓我們相信,Android走向世界第一移動(dòng)操作系統(tǒng)的寶座的步伐是勢(shì)不可擋的,Android可能真的會(huì)繼續(xù)帶著我們走向移動(dòng)設(shè)備夢(mèng)想的彼岸。1.3 國(guó)內(nèi)外研究現(xiàn)狀A(yù)ndroid 包括操作系統(tǒng)、用戶(hù)界面和應(yīng)用程序 移動(dòng)電話(huà)工作所需的全部軟件,而且不存在任何以往阻礙移動(dòng)產(chǎn)業(yè)創(chuàng)新的專(zhuān)有權(quán)障礙。Google與開(kāi)放手機(jī)聯(lián)盟合作開(kāi)發(fā)了 Android,這個(gè)聯(lián)盟由包括中國(guó)移動(dòng)、摩托羅拉、高通、宏達(dá)電和 T-Mobile 在內(nèi)的 30 多家技術(shù)和無(wú)線(xiàn)應(yīng)用的領(lǐng)軍企業(yè)組成。Google通過(guò)與運(yùn)營(yíng)商、設(shè)備制造商、開(kāi)發(fā)商和其他有關(guān)各方結(jié)成深層次
18、的合作伙伴關(guān)系,希望借助建立標(biāo)準(zhǔn)化、開(kāi)放式的移動(dòng)電話(huà)軟件平臺(tái),在移動(dòng)產(chǎn)業(yè)內(nèi)形成一個(gè)開(kāi)放式的生態(tài)系統(tǒng)。【4】Android 作為谷歌企業(yè)戰(zhàn)略的重要組成部分,將進(jìn)一步推進(jìn)隨時(shí)隨地為每個(gè)人提供信息這一企業(yè)目標(biāo)的實(shí)現(xiàn)。我們發(fā)現(xiàn),全球?yàn)閿?shù)眾多的移動(dòng)電話(huà)用戶(hù)從未使用過(guò)任何基于 Android 的電話(huà)。谷歌的目標(biāo)是讓?zhuān)ㄒ苿?dòng)通訊)不依賴(lài)于設(shè)備甚至平臺(tái)。出于這個(gè)目的,Android 將補(bǔ)充,而不會(huì)替代谷歌長(zhǎng)期以來(lái)奉行的移動(dòng)發(fā)展戰(zhàn)略:通過(guò)與全球各地的手機(jī)制造商和移動(dòng)運(yùn)營(yíng)商結(jié)成合作伙伴,開(kāi)發(fā)既有用又有吸引力的移動(dòng)服務(wù),并推廣這些產(chǎn)品?!?】開(kāi)放手機(jī)聯(lián)盟的成立和 Android 的推出是對(duì)現(xiàn)狀的重大改變,在帶來(lái)初步效
19、益之前,還需要不小的耐心和高昂的投入。但是,谷歌也在不斷努力,讓這些服務(wù)變得更好,同時(shí)也將添加更有吸引力的特性、應(yīng)用和服務(wù)。1.4 項(xiàng)目研究的主要內(nèi)容此游戲主要用到了Android用來(lái)畫(huà)圖的API,主類(lèi)繼承view類(lèi),重寫(xiě)其onDraw()方法并另起一個(gè)線(xiàn)程對(duì)主UI線(xiàn)程更新,實(shí)現(xiàn)整個(gè)游戲的動(dòng)態(tài)效果。其中自己寫(xiě)了很多算法來(lái)實(shí)現(xiàn)一些炫酷的效果。游戲主體框架的構(gòu)思,分為8大部分: com.hkdg.animation用來(lái)存放游戲中所用到的對(duì)ani動(dòng)畫(huà)的初始化及播放的類(lèi)。 com.hkdg.game主要用來(lái)存放從服務(wù)器解析過(guò)來(lái)的數(shù)據(jù),也包括讀取的本地?cái)?shù)據(jù)。 com.hkdg.game.Music用來(lái)存
20、放游戲中音樂(lè),音效的初始化及播放的類(lèi)。 com.hkdg.game.Object游戲中所用到的所有實(shí)體類(lèi)存放在此。 com.hkdg.game.View游戲UI由若干自定義View組成,所有的View類(lèi)存放于此。 com.hkdg.GameEngine此包中主要存放的是一個(gè)繼承了View的類(lèi),它另起了一個(gè)線(xiàn)程用來(lái)繪制界面,并同時(shí)更新主UI線(xiàn)程。 com.hkdg.Main這是一個(gè)存放著幾個(gè)Activity的包,游戲中為數(shù)不多的幾個(gè)activity都存放于此。 com.hkdg.tools這是一個(gè)存放著工具類(lèi)的工具包。1.5 本章小結(jié)本章主要對(duì)Android的發(fā)展歷程以及對(duì)本游戲內(nèi)容進(jìn)行了簡(jiǎn)單的
21、闡述,為Android開(kāi)發(fā)者提供一個(gè)參考。2 Android的開(kāi)發(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上面做過(guò)測(cè)試)。 系統(tǒng)XP sp2/sp3 32bit 來(lái)做講解,其他系統(tǒng)的可以google一下差異,反正都大同小異的。2.2 Android開(kāi)發(fā)環(huán)境建議使用eclipse進(jìn)行開(kāi)發(fā),當(dāng)然,eclipse版本要在3.3以上,這是官方說(shuō)法,3.3以下我也沒(méi)測(cè)過(guò),3.3 (Europa)、3.4 (Ganymede) 都
22、可以java版本或者EE版本也都沒(méi)問(wèn)題的,可以到eclipse官方下載最新版本。因?yàn)殚_(kāi)發(fā)是基于java的,所以jdk是少不了的,jdk要求是5.0或者6.0,我還是用5.0比較多,可以到sun官方下載。2.3 Android開(kāi)發(fā)環(huán)境變量的配置2.3.1 JDK的配置首先要到sun官方下載jdk,注意的是下載jdk而不是下載jre,因?yàn)閖re是提供java的運(yùn)行環(huán)境而不是開(kāi)發(fā)環(huán)境。sun官方網(wǎng)站是:http:/ 下載后安裝是下的解壓包那就解壓到某目錄,例如解壓到是C:Program FilesJavajdk1.5.0_14 右鍵點(diǎn)擊我的電腦 - 屬性 - 高級(jí),點(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)境變量的配置然后開(kāi)始 - 運(yùn)行 cmd,輸入java或者javac看看有沒(méi)有效果
24、,如果出來(lái)一大堆其它的東西,那就好了,如果出現(xiàn)類(lèi)似xxx不是內(nèi)部或者是外部命令之類(lèi)的,那就說(shuō)明你的設(shè)置有問(wèn)題,看看那里出問(wèn)題然后加以改正。2.3.2 SDK的配置因?yàn)槲覀円_(kāi)發(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一樣,我們也可以測(cè)試一
25、下環(huán)境變量是否設(shè)置成功,cmd窗口中輸入android,出現(xiàn)一堆東西,就完成了。2.4 Eclipse的配置當(dāng)然,以上都搞定后,還不能馬上用eclipse開(kāi)發(fā)android應(yīng)用程序,還必須添加eclipse插件才行,幸好這步驟非常輕松,打開(kāi)eclipse后,點(diǎn)擊菜單欄的help - install new software. 然后點(diǎn)擊Add會(huì)出來(lái)一個(gè)Add Site的窗口,這里Name輸入android(自己取個(gè)就是了),location中輸入插件的網(wǎng)絡(luò)地址: https:/dl- DDMS 和 Android Development Tools都選中,finish就可以了,可能有段時(shí)間會(huì)去計(jì)
26、算插件占用資源情況,慢慢等會(huì)。完成后會(huì)提示重啟eclipse來(lái)加載插件,ok重啟,就可以用了。2.5 本章小結(jié)本章將主要介紹如何構(gòu)建Android開(kāi)發(fā)環(huán)境,包括獲取Android SDK、Eclipse以及進(jìn)行Android Eclipse插件設(shè)置等。3 Android應(yīng)用程序核心3.1 應(yīng)用程序基礎(chǔ)Android的應(yīng)用程序全部都是用Java編程語(yǔ)言所寫(xiě)的。編譯后的Java代碼包括應(yīng)用程序要求的任何數(shù)據(jù)和資源文件,是通過(guò)aapt工具捆綁成一個(gè)Android包,歸檔文件是以.apk為后綴。這個(gè)文件是分發(fā)應(yīng)用程序和安裝到移動(dòng)設(shè)備的中介或者是工具,用戶(hù)下載這個(gè)文件到他們自己的設(shè)備上。一個(gè).apk文件
27、中的所有代碼就會(huì)被認(rèn)為是一個(gè)應(yīng)用程序。 aapt是Android Asset Packaging Tool的首寫(xiě)字母的縮寫(xiě),這個(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首先打開(kāi)一個(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)用程序所請(qǐ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用戶(hù)ID。權(quán)限被設(shè)置為每一個(gè)應(yīng)用程序的文件僅對(duì)用戶(hù)和
29、應(yīng)用程序自己本身可見(jiàn)。雖然有一些方法也可以暴露他們給其他應(yīng)用程序。也有可能的是設(shè)置兩個(gè)應(yīng)用程序共享一個(gè)用戶(hù)ID,這種情況下,他們能夠看到對(duì)方的文件。為了節(jié)省系統(tǒng)資源的占用,具有相同ID的應(yīng)用程序最好可以安排在同一個(gè)Linux進(jìn)程中,共享同一個(gè)VM。53.2 應(yīng)用程序組件3.2.1 AcitivityActivity是Android組件中最基本也是最為常見(jiàn)的組件,在一個(gè)Android應(yīng)用中,一個(gè)Activity通常就是一個(gè)單獨(dú)的屏幕。當(dāng)Activity從一種狀態(tài)轉(zhuǎn)變到另一種狀態(tài)時(shí),會(huì)調(diào)用以下保護(hù)方法來(lái)通知這種變化: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 類(lèi)的時(shí)候,通過(guò)覆蓋( override )這些方法即可在你需要處理的時(shí)候來(lái)調(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)給用戶(hù)。onResume :當(dāng)一個(gè)活動(dòng)和用戶(hù)發(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ù)庫(kù)記錄等。onStop :當(dāng)一個(gè)活動(dòng)不再需要展示給用戶(hù)的時(shí)候,觸發(fā)該方法。如果內(nèi)存緊張,系統(tǒng)會(huì)直接結(jié)束這個(gè)活動(dòng),而不會(huì)觸發(fā) onStop 方法。 所以保存狀態(tài)信息是應(yīng)該在onPause時(shí)做,而不是onStop時(shí)做?;顒?dòng)如果沒(méi)有在前臺(tái)運(yùn)行,都將被停止或者Linux管理進(jìn)程為了給新的活動(dòng)預(yù)留足夠的存儲(chǔ)空間而隨時(shí)結(jié)束這些活動(dòng)。因
32、此對(duì)于開(kāi)發(fā)者來(lái)說(shuō),在設(shè)計(jì)應(yīng)用程序的時(shí)候,必須時(shí)刻牢記這一原則。在一些情況下,onPause方法或許是活動(dòng)觸發(fā)的最后的方法,因此開(kāi)發(fā)者需要在這個(gè)時(shí)候保存需要保存的信息。onRestart :當(dāng)處于停止?fàn)顟B(tài)的活動(dòng)需要再次展現(xiàn)給用戶(hù)的時(shí)候,觸發(fā)該方法。onDestroy :當(dāng)活動(dòng)銷(xiāo)毀的時(shí)候,觸發(fā)該方法。和onStop 方法一樣,如果內(nèi)存緊張,系統(tǒng)會(huì)直接結(jié)束這個(gè)活動(dòng)而不會(huì)觸發(fā)該方法。onSaveInstanceState :系統(tǒng)調(diào)用該方法,允許活動(dòng)保存之前的狀態(tài),比如說(shuō)在一串字符串中的光標(biāo)所處的位置等。通常情況下,開(kāi)發(fā)者不需要重寫(xiě)覆蓋該方法,在默認(rèn)的實(shí)現(xiàn)中,已經(jīng)提供了自動(dòng)保存活動(dòng)所涉及到的用戶(hù)界面組件
33、的所有狀態(tài)信息。3.2.2 ServiceService是一種長(zhǎng)生命周期,沒(méi)有用戶(hù)界面的程序。Service是android 系統(tǒng)中的一種組件,它跟Activity的級(jí)別差不多,但是他不能自己運(yùn)行,只能后臺(tái)運(yùn)行,并且可以和其他組件進(jìn)行交互。Service的啟動(dòng)有兩種方式:context.startService()和context.bindService()。【7】使用context.startService() 啟動(dòng)Service是會(huì)經(jīng)歷:context.startService() -onCreate()- onStart()-Service running context.stopSer
34、vice() | -onDestroy() -Service stop如果Service還沒(méi)有運(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)用者自己直接退出而沒(méi)有調(diào)用stopService的話(huà),Service會(huì)一直在后臺(tái)運(yùn)行。該Service的調(diào)用者再啟動(dòng)起來(lái)后可以通過(guò)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將返回給客戶(hù)端一個(gè)IBind接口實(shí)例,IBind允許客戶(hù)端回調(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每一次的開(kāi)啟關(guān)閉過(guò)程中,只有onStart可被多次調(diào)用(通過(guò)多次startService調(diào)用),其他onCreate,onBind,onUnbind,onDestory在一個(gè)生命周期中只能被調(diào)用一次。service可以在和多場(chǎng)合的應(yīng)用中使用,比如播放多媒體的時(shí)候用戶(hù)啟動(dòng)了其他Activity這個(gè)時(shí)候程序要在后臺(tái)繼續(xù)播放,比如檢測(cè)SD卡上文件的變化,再或者在后臺(tái)記錄你地理信息位置的改變等等,總之服務(wù)嘛,總是藏在后
37、頭的。【7】3.2.3 BroadcastReciverBrodcastReciver是為了實(shí)現(xiàn)系統(tǒng)廣播而提供的組件。在android下,要想接受廣播信息,那么這個(gè)廣播接收器就得我們自己來(lái)實(shí)現(xiàn)了,我們可以繼承BroadcastReceiver,就可以有一個(gè)廣播接受器了。有個(gè)接受器還不夠,我們還得重寫(xiě)B(tài)roadcastReceiver里面的onReceiver方法,當(dāng)來(lái)廣播的時(shí)候我們要干什么,這就要我們自己來(lái)實(shí)現(xiàn)。具體的代碼:public class SmsBroadCastReceiver extends BroadcastReceiver Override public void onRec
38、eive(Context context, Intent intent) Bundle bundle = intent.getExtras(); /這里寫(xiě)你要做的事情 我們可以把廣播接收器注冊(cè)到系統(tǒng)里面,可以讓系統(tǒng)知道我們有個(gè)廣播接收器。這里有兩種,一種是代碼動(dòng)態(tài)注冊(cè):/生成廣播處理 smsBroadCastReceiver = new SmsBroadCastReceiver(); /實(shí)例化過(guò)濾器并設(shè)置要過(guò)濾的廣播 IntentFilter intentFilter = new IntentFilter(android.provider.Telephony.SMS_RECEIVED); /注
39、冊(cè)廣播 BroadCastReceiverActivity.this.registerReceiver(smsBroadCastReceiver, intentFilter); /onDestroy要注銷(xiāo)廣播 調(diào)用unregisterReceiver(.)函數(shù); 一種是在AndroidManifest.xml中配置廣播 兩種注冊(cè)類(lèi)型的區(qū)別是:1)第一種不是常駐型廣播,也就是說(shuō)廣播跟隨程序的生命周期。2)第二種是常駐型,也就是說(shuō)當(dāng)應(yīng)用程序關(guān)閉后,如果有信息廣播來(lái),程序也會(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)為常見(jiàn)的一些數(shù)據(jù)提供了默認(rèn)的ContentProvider1、ContentProvider使用表的形式來(lái)組織數(shù)據(jù) 無(wú)論數(shù)據(jù)的來(lái)源是什么,ContentProvider都會(huì)認(rèn)為是一種表,然后把數(shù)據(jù)組織成表格2、ContentProvider提供的方法 query:查詢(xún) insert:插入 update:更新 delete:刪除 getType:得到數(shù)據(jù)類(lèi)型 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,來(lái)實(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è)類(lèi),繼承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. 重寫(xiě)Activity的onFling()方法,用來(lái)判斷用戶(hù)手指滑動(dòng)的方向。onFling()是Android手勢(shì)中用來(lái)接收快速滑動(dòng)的方法,要實(shí)現(xiàn)這樣一個(gè)滑動(dòng)效果需要
44、一下四步, 否則失效。 【8】寫(xiě)一個(gè)類(lèi),實(shí)現(xiàn)OnGestureListener, OnTouchListener接口。重寫(xiě)里面的方法,記得把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)寫(xiě)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. 重寫(xiě)Activity的onScroll()方法,用來(lái)控制圖片的移動(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è)自己封裝的類(lèi),用來(lái)播
48、放游戲中的音樂(lè)。里面封裝了一個(gè)MediaPlayer對(duì)象及幾個(gè)對(duì)音樂(lè)文件進(jìn)行操作的方法。MediaPlayer類(lèi)可用于控制音頻/視頻文件或流的播放, 對(duì)播放音頻/視頻文件和流的控制是通過(guò)一個(gè)狀態(tài)機(jī)來(lái)管理的,如下圖所示: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 本游戲的核心類(lèi)GameEngine如果說(shuō)整個(gè)游戲是一架飛機(jī),
54、那么GameEngine絕對(duì)是這個(gè)飛機(jī)的引擎。其他所有的類(lèi)是這架飛機(jī)大大小小的零件,部件。他們之間通過(guò)種種設(shè)計(jì)模式也就是飛機(jī) 的鋼筋骨架連接起來(lái),成為一架完整的飛機(jī)。而這架飛機(jī)最終翱翔天空,GameEngine提供了核心動(dòng)力。首先這個(gè)類(lèi)繼承了View,而這個(gè)自定義的View就是我們游戲的界面。因此我們可以在這個(gè)View里面重寫(xiě)其onDraw()方法來(lái)畫(huà)出炫麗的游戲界面。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è)類(lèi)
56、實(shí)現(xiàn)了Runable接口,在這個(gè)View里面重新啟動(dòng)了一個(gè)線(xiàn)程用來(lái)驅(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: 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 汽車(chē)制造工藝學(xué)-第1章概述ppt課件
- 中樞神經(jīng)系統(tǒng)磁共振序列應(yīng)用課件
- 高考生物大一輪復(fù)習(xí)-第19課時(shí)-遺傳基本定律的知識(shí)梳理與題型探究ppt課件-新人教版
- 高中物理15斜拋運(yùn)動(dòng)ppt課件粵教版必修
- 七年級(jí)地理上冊(cè)3.2氣溫和降水(第2課時(shí)降水的變化干濕區(qū))ppt課件 中圖版
- (人教版)角的初步認(rèn)識(shí)課件
- 小學(xué)生安全教育之常見(jiàn)的簡(jiǎn)單急救課件
- 癲癇專(zhuān)題知識(shí)培訓(xùn)ppt課件
- 牛津高中英語(yǔ)高一上課件M2U3Task
- 中小學(xué)英語(yǔ)公開(kāi)課—《Childhood--Friends》課件
- 高一地理必修一21地球上的大氣人教版課件
- 振蕩器的設(shè)計(jì)解析ppt課件
- 誤差理論與數(shù)據(jù)處理 全套課件
- 直腸癌化療醫(yī)療護(hù)理查房培訓(xùn)ppt課件
- 模塊五-商務(wù)會(huì)面禮儀課件