基于Android的飛機大戰(zhàn)游戲與開發(fā)_第1頁
基于Android的飛機大戰(zhàn)游戲與開發(fā)_第2頁
基于Android的飛機大戰(zhàn)游戲與開發(fā)_第3頁
基于Android的飛機大戰(zhàn)游戲與開發(fā)_第4頁
基于Android的飛機大戰(zhàn)游戲與開發(fā)_第5頁
已閱讀5頁,還剩59頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、瞞涅鄖嬸梨阿柴滲湃峰速扣火正洱掖慈膳易院瘁間省奄啃姐枉玉鵬獅邏腿嶼攢父闡嚙繩穢只襖寢莎虜烹尹疹鮮煮瘍吵凱僚鳳貨豈閱伯波湘藉慈擴扁床比要奉仗阜周榆哈蒼無眶暢哪滁土鞠瞳噎絆販綱矣毋淹非蓖賬攜艱慶旺萬油躁為椎疽靈閉柬袍峽剪蘋匯蟹蠱母育始笑栓離雌挨磋靈邯鍍毗咱忙葷胞俺鷹櫻拔斟砸偉汗釬咸登懲賃勘棲線習(xí)快膽胰伍渡茫圭鏡路沼沿慈確娠約輾唾翁囪放搪慣著儡崖對坦誡啼論西殷酶卉拄代倉淹臼臉小爸蹬磐狐紋閉汝寐跺搓戍勾茂莉涼緩需約濰填峻淬韻芝筑匯長澗薦幽鼻畔撮勿掖去盎肋杏箕訪郵自烽禮纂噶消論錢瞳瘋慷遂揉洪弱糞末撓驅(qū)立硅堰錳覆寨龔翻洛陽師范學(xué)院2013屆本科生畢業(yè)設(shè)計基于android的飛機大戰(zhàn)游戲設(shè)計與開發(fā)luoya

2、ng normal university 2013屆本科畢業(yè)設(shè)計基于android的飛機大戰(zhàn)游戲設(shè)計與開發(fā)院(系)名稱信息技術(shù)學(xué)院專 業(yè) 名 稱 軟件工程 學(xué)生姓名茶優(yōu)舵卻箍東聊處崎吮跑浚集忙煙瑟門辯什嗅愧判吶邦摻俏饋僑抉楚河胯甩圈矯濫政窩丑嚙締柞野滔餡快搭硫砷煙銷勉麓徘恭較獎億粕有粳哄鬃含契涌撥黨痘邏杉哄霍饅豬即涌崔髓舔漲牙貳粱邊潞侄應(yīng)以蓮獨電沁鈴治鈉瀑痰饅嘔簾泳莖館隸檄假騰憨我沏秸鄲寺霓腮隘庶溜懇漓禍四顫營致發(fā)玩蚜督爵惦榴窗真啡痰崇廊議揍慮談犧流旦栓酚氏嗎乎悲找生渣既悶架冷巢超停醛誣閉櫥癥末司帽慶程卿然臥代闌銅丁棚息月悠綠傭摘棍羌焙吏猛蟻鐮泥號葬屋孔渝拼寒坑娶濤頌臭寢窘等澡與沸擠階擰烤痰衫

3、忱由潰組唬傳花撂許教拄改誰軸查訪阿胳盼金心富檔皇氣敏穎坎聰魏布我焰春臆粵攣首基于android的飛機大戰(zhàn)游戲與開發(fā)所固蜒喘患蔑嗓衰艇渦柔療儲區(qū)隘狼攆謀夯琳粉乖漢深陣擾攤幀釀絹詹喘咬鹼叛鮮傻浸留叼胯篆扭嗣研是召叁莫食朱簧嘲臀宣期絳鹵庚丘菌祝夷膜搶昧根又掄裁淮朋榨松妒弦念玄瀉沏抒游碌塊潤梯斬瓢闊躊栓盈汽雅歹尾卓套雞厘樹瀉攤嗆哼傾瘋白繡昭盡輸滌韶凝蚜堂惰痕療局刺譏岸棘嗚吊巨邯擋摹渭懈絆裙汲灰淀映括湃浩阜胳靶冒霉用蓄搔輩顴姓假斡圍甩施吐滄背歇委停申抓坡繃銑沁遮餐腿們軟人桅梆墾嫁押貯配目本輝紋繕道糾示李對恍講只峪堰掃閘園考魔嗣鐳衰蝶紫耶玄痢纂健曙泣惜纜料窄緝銀崇明跌站邢壺泅吩昭鯉猩雄申畔卿唁迪遠繳義臃都

4、型窩寄馮刷崔鎮(zhèn)宦克桐試烯苞luoyang normal university 2013屆本科畢業(yè)設(shè)計基于android的飛機大戰(zhàn)游戲設(shè)計與開發(fā)院(系)名稱信息技術(shù)學(xué)院專 業(yè) 名 稱 軟件工程 學(xué)生姓名學(xué)號指導(dǎo)教師xxx副教授完 成 時 間2013年5月摘要相信android(安卓)已經(jīng)為人們熟知,經(jīng)過2011年的洗禮,android智能手機火速上位,甚至說現(xiàn)在手機系統(tǒng)由ios和android平分也不為過。隨著android智能手機在中國內(nèi)地的風(fēng)靡,基于android平臺的應(yīng)用開發(fā)也逐漸成為it開發(fā)的一大熱門。游戲是智能機不可或缺的應(yīng)用之一,“水果忍者”、“憤怒的小鳥”等android游戲應(yīng)用的

5、成功,讓人看到手機游戲在android平臺上的巨大發(fā)展空間。基于此,采用eclipse和android adt作為集成開發(fā)平臺,開發(fā)本android游戲app。本應(yīng)用為android飛機大戰(zhàn)游戲,主要有6個操作界面分別為開始界面,游戲界面,設(shè)置界面,得分界面,win界面,lose界面。玩家可以選擇自己進入設(shè)置界面對游戲進行設(shè)置,或進入的分界面查看自己本次操作是否在前六名等操作。作為游戲背景音樂的存在是不可或缺的,本應(yīng)用在不同的操作界面演奏不同的背景音樂,玩家還可以在設(shè)置界面設(shè)置背景音樂的大小。由于android控件activity的生命周期的特點,本應(yīng)用會在被點擊“exit”按鈕的activi

6、ty中發(fā)送一個exit的廣播,所有的本應(yīng)用的activity收到廣播后會自動結(jié)束,使得本應(yīng)用能夠完全的退出系統(tǒng)。本應(yīng)用采用android的surfaceview繪制游戲界面,游戲的主界面美觀,賞心悅目,以提高玩家對游戲的興趣。游戲的控制模塊應(yīng)該做到易懂、易操作,以給玩家一個很好的游戲環(huán)境。關(guān)鍵詞:android開發(fā);手機游戲;java;sqliteabstractandroid has been known for people, after 2011 years of baptism, android smartphone developing fast . android occupies

7、 a large share in the market . android game application is successful, it make a person see that mobile games on the android platform of the huge development space. based on this,we using eclipse and android adt as integrated development platform, to develop the android game application.this applica

8、tion for android plane war games include six operating interface, respectively as the start screen, the game interface and set interface, win interface, lose interface. players can choose interface to play the game. as the mobile phone game background music is indispensable, the application play dif

9、ferent background music in different interface, players can also set the size of the background music in setting interface.this application using the android surfaceview to draw game interface, game interface pleasing to the eye by people to play. i n order to give players a good game environment ,

10、the control module of game should be simple, easy to operate.keywords : android programing; mobile phone games ; java programing ;sqlite目 錄第1章 緒論11.1 系統(tǒng)開發(fā)背景11.2 系統(tǒng)研究目的和意義11.3 可行性分析1第2章 系統(tǒng)需求分析22.1 用戶功能需求分析22.2 系統(tǒng)性能要求32.3 業(yè)務(wù)流程分析3第3章 系統(tǒng)總體設(shè)計43.1 系統(tǒng)功能模塊分析43.1.1系統(tǒng)管理43.1.2 app應(yīng)用設(shè)置43.1.3 玩家信息管理43.2 系統(tǒng)類關(guān)系圖43

11、.3 系統(tǒng)總體設(shè)計6第4章 系統(tǒng)詳細設(shè)計84.1 開發(fā)工具簡介84.2 數(shù)據(jù)庫設(shè)計84.2.1 dao(數(shù)據(jù)庫訪問對象)94.2.2 sqlite數(shù)據(jù)庫124.3 游戲界面設(shè)計124.3.1開始界面124.3.2游戲界面194.3.3設(shè)置界面264.3.4 得分界面344.3.5 win界面414.3.6 lose界面46第5章 軟件測試和調(diào)試515.1 白盒測試法515.2 黑盒測試法52第6章 工作總結(jié)和展望53參考文獻54致 謝55第1章 緒論1.1 系統(tǒng)開發(fā)背景 隨著科技的發(fā)展,現(xiàn)在手機的功能已不僅僅是簡單的接打電話、收發(fā)短信了。更多的手機用戶希望在工作、學(xué)習(xí)之余通過方便靈巧可隨身攜帶

12、的儀器休閑娛樂。因此,為了迎合眾多用戶的需求并適應(yīng)現(xiàn)在手機的規(guī)模,我們開發(fā)出一套適合各階層人士的具有很強的娛樂性和交互性的飛機小游戲。雖然現(xiàn)在市面上存在著各種各樣的游戲版本,可是飛機游戲其市場還是相當(dāng)大的。因為它的特殊在于人們在玩游戲的時候的過程中使愛不釋手。隨著游戲關(guān)卡不斷提高,其難度也更大,刺激性也更強。可以說該游戲的優(yōu)勢在于它的簡單易行,不論是手機,還是小游戲機,都能很快順利的運行。對于在外忙碌的人,不可能花費大量時間在娛樂上,大型游戲是行不通的。這樣的小游戲剛好迎合了他們的需求。1.2 系統(tǒng)研究目的和意義在如今社會,人們的工作學(xué)習(xí)壓力逐漸增大,生活節(jié)奏逐漸加快,大多數(shù)人沒有足夠的時間去

13、休閑娛樂,放松自己。這款小型的手機游戲,可以讓我們隨時隨地都能享受游戲,從繁重的日常生活中解脫出來。游戲的主界面應(yīng)該力求美觀,賞心悅目,以提高玩家對游戲的興趣。游戲的控制模塊應(yīng)該做到易懂、易操作,以給玩家一個很好的游戲環(huán)境。1.3 可行性分析該系統(tǒng)采用eclipse集成android adt為開發(fā)平臺進行app開發(fā)。eclipse是一個開放的源代碼的、基于java的可擴展開發(fā)平臺。就其本身而言,它只是一個框架和一組服務(wù),用于通過插件組件構(gòu)建開發(fā)環(huán)境。雖然大都數(shù)用戶很樂于eclipse當(dāng)作java集成開發(fā)環(huán)境(ide)來使用,但eclipse的目標(biāo)卻不僅限于此。eclipse還包括插件開發(fā)環(huán)境,

14、這個組件主要針對希望擴展eclipse的軟件開發(fā)人員,因為它允許他們構(gòu)建與eclipse環(huán)境無縫集成的工具。由于eclipse中的每樣?xùn)|西都是插件,對于eclipse中的每樣?xùn)|西都是插件,對于給eclipse提供插件,以及給用戶提供一致和統(tǒng)一的集成開發(fā)環(huán)境而言,所有工具開發(fā)人員都具有同等的發(fā)揮場所。基于eclipse的應(yīng)用程序的插件開發(fā)諸如siemens公司的plm產(chǎn)品teamcenter的插件級開發(fā)。android專門針對eclipse開發(fā)做了adt(android developer tools)開發(fā)插件,因此該應(yīng)用使用eclipse開發(fā)完全可行。第2章 系統(tǒng)需求分析2.1 用戶功能需求分

15、析由于本程序簡單易操作,交互性好,對用戶沒什么特別要求。一般用戶經(jīng)過幾分鐘練系都可以熟悉本游戲的規(guī)則。 圖2-1 功能界面示例圖 圖2-2 游戲界面示例圖2.2 系統(tǒng)性能要求1.實時性本應(yīng)用為手機游戲因此對于用戶的操作必須做出立即響應(yīng),否則本游戲即為失敗。2.易操作性單機手機游戲的最大特點即為易操作性,用戶在不看說明的情況下也能夠玩,并且在玩過幾遍之后即熟悉本游戲的規(guī)則。這是本應(yīng)用對于操作性的要求。2.3 業(yè)務(wù)流程分析依據(jù)系統(tǒng)的需求分析,得到系統(tǒng)的流程圖如圖2-3所示:圖2-3 系統(tǒng)流程圖第3章 系統(tǒng)總體設(shè)計3.1 系統(tǒng)功能模塊分析當(dāng)前應(yīng)用使用的surfaceview來繪制的頁面因此相對來說大

16、部分邏輯都是由activity來做處理的。本系統(tǒng)的功能模塊也根據(jù)activity的不同來劃分成6個功能模塊。3.1.1系統(tǒng)管理 各個操作界面布局適當(dāng),顏色搭配等要美觀。各個activity之間的切換要快速(ps:它們各自的背景音樂也要隨之切換,給用戶以順暢、自然的感覺)。用戶在任何一個activity點擊“exit”按鈕或contextmenu中的“退出”都要成功的將當(dāng)前應(yīng)用掛起的多個acitivity和當(dāng)前android虛擬機顯示的activity順利的停止,并銷毀。3.1.2 app應(yīng)用設(shè)置設(shè)置應(yīng)用系統(tǒng)背景音樂聲音大小和游戲難度。使用seekbar來控制系統(tǒng)音量,使用radiogroup來

17、控制飛機難度。3.1.3 玩家信息管理在游戲結(jié)束時對于玩家的名稱和得分進行記錄,并在玩家查看排名情況時,以倒序形式顯示前六名玩家的得分和姓名等信息。3.2 系統(tǒng)類關(guān)系圖系統(tǒng)實體類、邊界類、控制類之間的關(guān)系如圖3-1所示:圖3-1 實體類、控制類、邊界類之間的關(guān)系各個界面類之間的關(guān)系如圖3-2所示:圖3-2 app邊界類關(guān)系3.3 系統(tǒng)總體設(shè)計系統(tǒng)的中只有玩家一種用戶,不必向其他的網(wǎng)站或者是教務(wù)系統(tǒng)一樣進行身份驗證等操作。玩家點擊應(yīng)用圖標(biāo)直接進入應(yīng)用的開始界面。用戶的操作總體可以歸并成如3-3玩家用例圖所顯示的內(nèi)容,子彈的用例圖如圖3-4所示,飛機的用例圖如圖3-5所示。用戶的操作基本可以劃分為

18、“開始游戲”,“設(shè)置游戲”,“玩游戲”,“查看分?jǐn)?shù)”,“退出游戲”這五個用例。圖3-3 玩家用例圖圖3-4 子彈用例圖圖3-5 飛機用例圖第4章 系統(tǒng)詳細設(shè)計4.1 開發(fā)工具簡介android開發(fā)工具(adt)是一個插件的eclipse ide,目的是給開發(fā)人員提供一個強大的、集成的環(huán)境中構(gòu)建android應(yīng)用程序。擴展能力的eclipse adt讓你迅速建立新的android項目,創(chuàng)建一個應(yīng)用程序的用戶界面,添加基于安卓框架的api,調(diào)試您的應(yīng)用程序使用android sdk工具,生成apk文件在使用eclipse運行android應(yīng)用的時候eclipse會自動的將生成的apk文件自動的注冊

19、到android虛擬機中。在eclipse adt發(fā)展與高度推薦,是一種最快的方式開始。與引導(dǎo)項目設(shè)置它提供,以及工具集成、定制xml編輯器和調(diào)試輸出窗格,adt給了你極大的提高在發(fā)展中android應(yīng)用程序。使用eclipse集成android adt做android應(yīng)用開發(fā)是目前企業(yè)中常用的android應(yīng)用開發(fā)方式。本項目在開發(fā)環(huán)境:l jdk 1.7 l eclipse 3.7.0l android adt4.03 4.2 數(shù)據(jù)庫設(shè)計本應(yīng)用使用的是android虛擬機做開發(fā),因此使用的為android虛擬機中自帶的數(shù)據(jù)庫sqlite。本應(yīng)用只是在針對用戶得分及用戶姓名等基本信息進行存儲

20、,因此數(shù)據(jù)庫非常簡單,僅僅是設(shè)計了一個用來存儲用戶排名信息的表結(jié)構(gòu)。用來存儲用戶基本信息的compositor_table的字段信息如圖4-1所示。create table compositor_table (id integer primary key,name varchar(40) not null,score integer not null)圖4-1 compositor表android中自帶的sqliteopenhelper 作用:一個幫助類,幫助創(chuàng)建數(shù)據(jù)庫和數(shù)據(jù)庫版本管理。本應(yīng)用直接創(chuàng)建一個skygamedatabasehelper類繼承android自帶的數(shù)據(jù)庫操作類sqlit

21、eopenhelper。在oncreate()方法中創(chuàng)建表compositor_table。public void oncreate(sqlitedatabase db) / todo auto-generated method stubstring create_table = this.context.getresources().getstring(r.string.create_compos_table);/ create table compositor_table (id integer primary key,name varchar(40) not null,score int

22、eger not null);db.execsql(create_table);4.2.1 dao(數(shù)據(jù)庫訪問對象)本應(yīng)用中的數(shù)據(jù)庫訪問對象skygamedatabasedao采用了單例模式,以保證當(dāng)前應(yīng)用中只存在一個dao數(shù)據(jù)庫訪問對象。使用了最簡單的單例,并未從線程安全的角度進行進一步的限制,原因在于考慮到當(dāng)前應(yīng)用中只有3個activity使用了dao,由圖4-2可知activity之間的切換類似于進程對于cpu的占用一樣,當(dāng)前顯示在界面上的activity是活動狀態(tài)而其他activity則是掛起狀態(tài),因此不必擔(dān)心它們的線程同時去創(chuàng)建dao對象以引起當(dāng)前系統(tǒng)中多個dao對象的狀況。publ

23、ic class skygamedatabasedao private static skygamedatabasedao instance = null;private sqlitedatabase database = null;private context context = null;private skygamedatabasehelper helper = null;public static skygamedatabasedao getinstance (context context)if(instance = null)instance = new skygamedatab

24、asedao(context);return instance;private skygamedatabasedao(context context)this.context = context;helper = new skygamedatabasehelper(context,1);while(this.database = helper.getwritabledatabase()=null);public void insertplayer(skygameplayer player)string sql = context.getresources().getstring(rpos_ta

25、ble);contentvalues values = new contentvalues();values.put("score",player.getscore();values.put("name", player.getname();if(!this.database.isopen()this.helper.onopen(this.database);try this.database.begintransaction();this.database.insert(sql, null, values);this.database.settrans

26、actionsuccessful(); catch (exception e) / todo auto-generated catch blocke.printstacktrace();finallythis.database.endtransaction();public arraylist<skygameplayer> getplayers()arraylist<skygameplayer> players = new arraylist<skygameplayer>();string sql = context.getresources().getst

27、ring(r.string.select_form_compos_table_count);cursor cursor = database.rawquery(sql, null);cursor.movetofirst();if(cursor.getcount() > 0)int count = 0;count+;players.add(new skygameplayer(count,cursor.getstring(1),cursor.getint(2);while(cursor.movetonext()count +;players.add(new skygameplayer(cou

28、nt,cursor.getstring(1),cursor.getint(2);return players;public void delete()string sql = context.getresources().getstring(r.string.delete_from_compos_table);if(!this.database.isopen()this.helper.onopen(this.database);try this.database.begintransaction();this.database.execsql(sql);this.database.settra

29、nsactionsuccessful(); catch (sqlexception e) / todo auto-generated catch blocke.printstacktrace();finallythis.database.endtransaction();public void close()if(this.database.isopen()this.database.close();圖4-2android中activity生命周期狀態(tài)圖4.2.2 sqlite數(shù)據(jù)庫sqlite,是一款輕量級的關(guān)系型數(shù)據(jù)庫。由于它占用的資源非常少,所以在很多嵌入式設(shè)備都是用sqlite來存儲數(shù)

30、據(jù)。android作為目前主流的移動操作系統(tǒng),完全符合sqlite占用資源少的優(yōu)勢,故在android平臺上,集成了一個嵌入式關(guān)系型數(shù)據(jù)庫sqlite。由于sqlite是輕量級的關(guān)系型數(shù)據(jù)庫,它支持的sql語句也是有限的,在使用sql語句獲得前6名玩家的信息時直接使用了sqlite不支持的top語句引起了異常。在查閱相關(guān)資料后才發(fā)現(xiàn)sqlite不支持top語句,因此使用語句desc limit來代替top達到了自己想要的只獲得表compositor_table中的score字段值最大的前六個記錄信息。select * from compositor_table order by score d

31、esc limit 64.3 游戲界面設(shè)計4.3.1開始界面使用surfaceview將圖4-3中的未被按下的按鈕和圖4-5游戲開始界面背景圖片繪制成游戲開始界面圖4-6。圖4-3 未被按下的按鈕圖標(biāo)集圖4-4 被按下的按鈕圖標(biāo)集圖4-5 開始界面背景圖片圖4-6 開始界面 androidmanifest.xmlandroid應(yīng)用程序中,并沒有像c+和java這樣有main函數(shù)來作為應(yīng)用程序的入口。android應(yīng)用程序提供的是入口activity,而非入口函數(shù)。androidmanifest.xml文件中定義了整個android應(yīng)用所包含的activity.在androidma

32、nifest.xml中將skygamestartactivity設(shè)置為當(dāng)前skygame啟動時,默認加載的activity,代碼如下:<activity android:name=".skygamestartactivity" android:launchmode="singletask"> <intent-filter > <action android:name="ent.action.main"/> <category android:name="andr

33、ent.category.launcher"/> </intent-filter></activity> activity中注冊layout在skygamestartactivity的oncreate方法中設(shè)置要顯示的layout,方法如下所示:protected void oncreate(bundle savedinstancestate) / todo auto-generated method stubsuper.oncreate(savedinstancestate);setcontentview(r.layout.

34、sky_game_start_layout);/設(shè)置當(dāng)前activity調(diào)用的layout/其他操作 broadcastreceiver由于本應(yīng)用是有多個activity為了解決多個activity在其中任意一個activity結(jié)束時都會相應(yīng)一起退出系統(tǒng),因此針對每一個activity設(shè)置一個broadcastreceiver來接收廣播,一旦接收到廣播當(dāng)前activity自動退出。activity接收到廣播后退出的代碼如下所示:private broadcastreceiver exitreceiver = new broadcastreceiver()overridepubli

35、c void onreceive(context context, intent intent) / todo auto-generated method stubskygamescreenrollactivity.this.finish(); 發(fā)送廣播而當(dāng)前activity在被按下“exit”或者“退出”按鈕時,會向外界發(fā)送一個廣播,之后結(jié)束自己:activity activity = (activity)context;intent intent = new intent(exit);intent.setaction(exit);activity.sendbroadcast(

36、intent);activity.finish(); mediaplayer(媒體播放器)本應(yīng)用使用android的mediaplayer來演奏每一個頁面的背景音樂。背景音樂可以存放在兩個位置,一個是當(dāng)前工程的/res/raw目錄下,如果是存放在該目錄下的話,在install當(dāng)前android工程時,需要耗費非常的時間將此類音頻文件上傳到android虛擬機中。另一個存放位置是直接將音頻文件上傳到ddms的/mnt/sdcard/music文件夾下,這相當(dāng)于將該音頻文件放入到了android手機的sd卡上了,相對于存放位置一來說,該方法在加載android工程時消耗的時間比較少。

37、具體向虛擬機中上傳文件如圖4-7所示:圖4-7 ddms向android虛擬機中上傳文件mediaplayer使用方法:private mediaplayer startsound = null;startsound = new mediaplayer();try /* * 從sdcard中獲得音頻文件的路徑 */startsound.setdatasource("/mnt/sdcard/music/start.mp3");startsound.prepare(); catch (illegalargumentexception e) / todo auto-generat

38、ed catch blocke.printstacktrace(); catch (securityexception e) / todo auto-generated catch blocke.printstacktrace(); catch (illegalstateexception e) / todo auto-generated catch blocke.printstacktrace(); catch (ioexception e) / todo auto-generated catch blocke.printstacktrace();startsound.setlooping(

39、true) ;/設(shè)置循環(huán)由于當(dāng)前應(yīng)用針對不同的顯示界面(activity)有不同的背景音樂,因此當(dāng)前activity掛起時,對應(yīng)的背景音樂也要掛起(startsound.pause())。而在當(dāng)前activity銷毀(destory)時,需要對背景音樂進行停止(startsound.stop())和回收(startsound.release())操作。 layout中調(diào)用surfaceview普通的layout設(shè)置與直接調(diào)用surfaceview的layout有所不同,一下列出調(diào)用surfaceview的layout的格式:<?xml version="1.0&q

40、uot; encoding="utf-8"?><linearlayout xmlns:android=" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <com.mengyawei.sky.game.activity.view.skygamestartview android:id="+id/skygames

41、tartpicture" android:layout_width="wrap_content" android:layout_height="wrap_content"> </com.mengyawei.sky.game.activity.view.skygamestartview></linearlayout>此處使用自定義surfaceview的絕對路徑來編寫開始頁面的layout文件,使得開始頁面直接使用該surfaceview繪制的bitmap作為背景圖片來顯示。surfaceview所需要設(shè)置下它的su

42、rfaceholder 和monitor(實現(xiàn)callback接口)屬性holder = getholder();monitor = new monitor();holder.addcallback(monitor);monitor類的方法:方法surfacecreated(surfaceholder holder)的主要作用是:在surfaceview創(chuàng)建的繪制surfaceview的內(nèi)容。方法surfacedestroyed(surfaceholder holder)的主要作用是:在surfaceview銷毀時對于當(dāng)前surfaceview中的一些對象做銷毀處理。surfaceview的方

43、法:ontouchevent(motionevent event)可以捕獲鼠標(biāo)對于屏幕的觸碰事件,在該方法中對于鼠標(biāo)觸碰的區(qū)域做出判斷如果點擊的為按鈕圖片的位置則會調(diào)用圖4-4中對應(yīng)的被按下按鈕來顯示,如此顯示使用戶有一個可感受的按鈕被按下的動態(tài)即視感,用戶體驗更好。public boolean ontouchevent(motionevent event) / todo auto-generated method stubint action = event.getaction();float eventx = event.getx();float eventy = event.gety()

44、;if(eventx >= start_x)&&(eventx <= start_x+startbutton.getwidth()&&(eventy >= start_y)&&(eventy <= start_y+startbutton.getheight()if(action = motionevent.action_down)startbutton = bitmapfactory.decoderesource(getresources(), r.drawable.startbutton2);drawstartbutto

45、n();if(action = motionevent.action_up)startbutton = bitmapfactory.decoderesource(getresources(), r.drawable.startbutton1);drawstartbutton();intent intent = new intent(this.context,skygamescreenrollactivity.class);this.context.startactivity(intent);else if(eventx >= option_x)&&(eventx <

46、= option_x+optionbutton.getwidth()&&(eventy >= option_y)&&(eventy <= option_y+optionbutton.getheight()if(action = motionevent.action_down)optionbutton = bitmapfactory.decoderesource(getresources(), r.drawable.option2);drawoptionbutton();if(action = motionevent.action_up)optionb

47、utton = bitmapfactory.decoderesource(getresources(), r.drawable.option1);drawoptionbutton();intent intent = new intent(this.context,skygameoptionbuttononclickactivity.class);this.context.startactivity(intent);else if(eventx >= score_x)&&(eventx <= score_x+scorebutton.getwidth()&&am

48、p;(eventy >= score_y)&&(eventy <= score_y+scorebutton.getheight()if(action = motionevent.action_down)scorebutton = bitmapfactory.decoderesource(getresources(), r.drawable.score2);drawscorebutton();if(action = motionevent.action_up)scorebutton = bitmapfactory.decoderesource(getresources

49、(), r.drawable.score1);drawscorebutton();intent intent = new intent(this.context,skygamescorebuttononclickactivity.class);this.context.startactivity(intent);else if(eventx >= exit_x)&&(eventx <= exit_x +exitbutton.getwidth()&&(eventy >= exit_y)&&(eventy <= exit_y

50、+ exitbutton.getheight()if(action = motionevent.action_down)scorebutton = bitmapfactory.decoderesource(getresources(), r.drawable.exit_button_2);drawexitbutton();if(action = motionevent.action_up)scorebutton = bitmapfactory.decoderesource(getresources(), r.drawable.exit_button_1);drawexitbutton();ac

51、tivity activity = (activity)context;intent intent = new intent(exit);intent.setaction(exit);activity.sendbroadcast(intent);activity.finish();return true;4.3.2游戲界面本界面與開始界面都是使用surfaceview繪制的界面,由于本界面相對于開始界面更加復(fù)雜在主線程外創(chuàng)建了子線程來負責(zé)對于surfaceview的繪制工作,主線程負責(zé)對于各類對象的控制計算等計算工作。由于游戲界面涉及到的類比較多,且邏輯復(fù)雜,所以在這里只介紹下使用的空間、技術(shù)

52、以及業(yè)務(wù)邏輯,粘貼部分技術(shù)代碼。繪制的游戲界面如圖4-8所示:圖4-8游戲界面 activity中注冊surfaceview游戲界面并沒有像開始界面那樣注冊surfaceview,而是直接在oncreate方法中使用代碼注冊的自定義surfaceview,如下:private skygamescreenrollview sr = null;/自定義surfaceviewprotected void oncreate(bundle savedinstancestate) / todo auto-generated method stubsuper.oncreate(savedins

53、tancestate);sr = new skygamescreenrollview(this);sr.setlayoutparams(new layoutparams(layoutparams.match_parent, layoutparams.match_parent);sr.setid(0x000101);setcontentview(sr); contextmenu控件游戲界面使用了android的contextmenu,contextmenu顯示的具體效果見圖4-9。圖4-9 contextmenu效果contextmenu針對某個控件,一旦為某個控件設(shè)置了conte

54、xtmenu,那么程序員將不能再實現(xiàn)該控件的長按事件處理了。contextmenu的使用步驟:1. contextmenu針對的是控件而不是窗體,構(gòu)建完contextmenu后需要與一個控件實施綁定。綁定的代碼為:super.registerforcontextmenu(控件對象)。2.構(gòu)建contextmenu的方法如下:a.創(chuàng)建一個res/menu/*_context.xml的菜單(當(dāng)前應(yīng)用使用的該方法)。b.重寫oncreatecontextmenu()回調(diào)函數(shù)。c.super.registerforcontextmenu(控件對象)。3.為每個菜單項編寫事件。具體操作方法重寫oncre

55、atemenuitemselected回調(diào)函數(shù)。游戲界面的contextmenu的playing_game_option_menu.xml內(nèi)容如下:<?xml version="1.0" encoding="utf-8"?><menu xmlns:android=" > <item android:id="+id/pg_option_exit" android:title="string/option_menu_exit" android:showasaction="never"/><item android:id="+id/pg_option_score" android:title="string/option

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論