臧利萍 劉燕美 高振
【摘要】針對Android平臺下游戲?qū)崟r交互的特點,本文使用SurfaceView進(jìn)行界面布局的構(gòu)建,采用矩形碰撞檢測進(jìn)行算法分析,以數(shù)組、list、HashMap等進(jìn)行數(shù)據(jù)的存儲和更新。本文以Java多線程技術(shù)為開發(fā)的關(guān)鍵技術(shù)。本文使用觸屏、鍵盤和重力傳感器三種控制方式,實現(xiàn)了游戲場景、游戲難度的選擇,游戲背景音樂、音效和震動效果的設(shè)置以及白天模式和夜間模式兩種適合不同光照條件的游戲模式。
【關(guān)鍵詞】Android;飛行射擊游戲;多線程;傳感器
一、緒論
Android是Google公司針對手機(jī)等移動終端設(shè)備設(shè)計的開源平臺,該平臺基于Linux內(nèi)核,有操作系統(tǒng)、中間層、用戶界面層和應(yīng)用程序組成,是首個為移動終端打造的真正開放和完整的操作系統(tǒng)。該平臺以其開放性、平等性、無界性、方便性和硬件豐富性受到用戶和開發(fā)者的青睞,并迅速占領(lǐng)移動終端市場[1]。該平臺呈現(xiàn)眾多應(yīng)用程序。射擊類游戲是一種較成熟的游戲類型,在移動手機(jī)中飛行射擊類游戲更是受到用戶的特別青睞。隨著Android平臺的發(fā)展和移動設(shè)備硬件水平的不斷提高,無論是在數(shù)量上還是質(zhì)量上,Android游戲手機(jī)游戲都得到很大的發(fā)展,優(yōu)秀的2D、3D游戲?qū)映霾桓F[2]。本文是基于Android平臺設(shè)計一款飛行射擊類游戲。
本游戲使用Android中的SurfaceView作為主要視圖,采用矩形碰撞檢測作為游戲的主要碰撞檢測算法。游戲涉及Android圖形處理、數(shù)據(jù)存儲、多媒體開發(fā)、傳感器開發(fā)、Android進(jìn)程內(nèi)部通信和Java集合框架的應(yīng)用。
游戲提供了觸屏、鍵盤和重力傳感器三種控制方式,實現(xiàn)了游戲場景、游戲難度的選擇,游戲背景音樂、音效和震動效果的設(shè)置以及白天模式和夜間模式兩種適合不同光照條件的游戲模式。
二、游戲設(shè)計
1.界面設(shè)計
本游戲的主要包括歡迎界面、菜單界面、幫助界面、游戲界面、設(shè)置界面、游戲勝利界面、游戲失敗界面等。其中游戲界面采用SurfaceView視圖,該視圖下采用onTouchEvent、onKeyUp、onKeyDown回調(diào)方法捕獲用戶輸入,實現(xiàn)人機(jī)交互。SurfaceView在使用時通過SurfaceHolder管理,SurfaceHolder通過其內(nèi)部接口CallBack實現(xiàn)對SurfaceView狀態(tài)變化的監(jiān)聽,從而實現(xiàn)對Surfaceview的管理[4]。SurfaceView用來保存界面像素信息,游戲界面的構(gòu)建、敵機(jī)、我機(jī)、子彈等繪制工作由SurfaceHolder完成。SurfaceView運用雙緩沖技術(shù)實現(xiàn)界面繪制,提高界面繪制的實時性和交互性。
2.界面功能
游戲控制方式:游戲提供觸屏控制、傳感器控制、鍵盤控制三種控制方式。本文重點描述傳感器控制的過程。游戲通過調(diào)用相關(guān)的方法獲得傳感器服務(wù),該方法返回一個負(fù)責(zé)管理移動終端設(shè)備的傳感器對象,并且提供了訪問設(shè)備支持的傳感器的方法。Android系統(tǒng)提供了一個對傳感器數(shù)據(jù)進(jìn)行實時監(jiān)控的類[5]。在傳感器對象中利用該對象的方法以特定的頻率監(jiān)聽傳感器數(shù)據(jù)的更新。
游戲設(shè)置:主要實現(xiàn)游戲背景音樂、音效、震動效果等設(shè)置,游戲控制方式設(shè)置,游戲模式(白天模式和夜間模式)設(shè)置。Andriod對音頻文件的處理主要通過MediaPlayer和soundpool實現(xiàn)。MediaPlayer具有資源占用率高、延遲時間較長,不支持同時播放多個音頻文件的特點[6]??紤]到游戲音樂實時性、多變性等特點Soundpool成為播放音效文件的最佳選擇,它支持多個音樂文件的同時播放。
游戲場景與難度選擇:實現(xiàn)不同游戲場景的選擇,實現(xiàn)游戲難度(容易、中等、困難)的選擇,保存游戲進(jìn)行到一半的信息。本文采用SQLite存儲游戲相關(guān)的數(shù)據(jù)。SQLite是Android系統(tǒng)內(nèi)嵌的一個非常優(yōu)秀輕型的數(shù)據(jù)庫,它占用資源非常的低[7],支持目前市面上主流的操作系統(tǒng),同時又能夠跟很多程序語言相結(jié)合,與其他開源數(shù)據(jù)庫管理系統(tǒng)如MySql相比,SQLite具有更快的處理速度。
三、游戲碰撞檢測
碰撞檢測是游戲開發(fā)中的重要組成部分,游戲開發(fā)中常用的碰撞檢測技術(shù)有矩形碰撞、圓形碰撞、像素碰撞等[8]。
矩形碰撞就是利用兩個矩形之間的位置關(guān)系來進(jìn)行判斷,如果一個矩形的像素和另外一個矩形有公共部分,就可以認(rèn)為這兩個矩形發(fā)生了碰撞[9]。
圓形碰撞是利用兩個圓形的圓心距與這兩個圓的半徑之和的大小關(guān)系進(jìn)行判定的;當(dāng)兩圓的圓心距小于兩圓半徑之和,則判定發(fā)生了碰撞,否則,沒有發(fā)生碰撞。
像素碰撞是通過檢測兩個對象的像素是否有重復(fù)判斷碰撞的一種碰撞檢測技術(shù),由于這種方法造成代碼效率低下,在游戲開發(fā)中是不推薦使用的。實際的應(yīng)用中常用多矩形或多圓形的檢測方式來代替。分析飛機(jī)射擊游戲交互性和實時性的特點,本文采用矩形碰撞技術(shù)實現(xiàn)碰撞檢測,其實,兩個矩形不發(fā)生碰撞的情況就只有以下四種,處理這四種情況外,其他的位置關(guān)系都應(yīng)判定為發(fā)生了碰撞。
四、多線程技術(shù)
1.進(jìn)程與線程
進(jìn)程就是一個有自己獨立的內(nèi)存空間和系統(tǒng)資源的執(zhí)行中的程序。線程是一段完成某個特定功能的代碼[10]。同類的多個線程共享內(nèi)存空間和系統(tǒng)資源,所以系統(tǒng)在線程之間切換時,系統(tǒng)開銷占用要比進(jìn)程小得多,正因如此,線程也被稱為輕量級進(jìn)程。進(jìn)程和線程之間是一對多的關(guān)系[11]。
基于Android操作系統(tǒng)而言,每個組件都是一個進(jìn)程,進(jìn)程之間通過IBinder對象進(jìn)行通信,進(jìn)程內(nèi)部通過Handler實現(xiàn)線程間的通信[12]。主線程主要工作是負(fù)責(zé)維護(hù)組件對象和應(yīng)用程序創(chuàng)建的窗口,以及更新主界面,如果組件在應(yīng)用程序中創(chuàng)建了自己的線程,子線程無法對用戶界面進(jìn)行更改,只能通過handler與主線程進(jìn)行交互,實現(xiàn)用戶界面的更新。
2.游戲中多線程實現(xiàn)
多線程技術(shù)是本游戲設(shè)計的關(guān)鍵技術(shù),多線程的思想在游戲的各個界面都有體現(xiàn),其中以游戲界面體現(xiàn)最為顯著。游戲界面中除了主線程之外還存在計數(shù)器線程、傳感器事件處理線程、鍵盤事件處理線程、游戲邏輯處理線程和界面繪制線程,這些線程都是以內(nèi)部類的形式創(chuàng)建的,方便實現(xiàn)線程同步。其中計數(shù)器線程負(fù)責(zé)對游戲時間軸計數(shù)器的維護(hù),傳感器數(shù)據(jù)處理線程只有在啟用傳感器時才存在并運行在系統(tǒng)中,傳感器事件處理線程通過以一定的時間間隔獲取并處理傳感器事件數(shù)據(jù)控制我機(jī)的移動,鍵盤事件處理線程負(fù)責(zé)處理用戶鍵盤事件,游戲邏輯處理線程負(fù)責(zé)游戲中所有元素(敵機(jī)的移動、碰撞檢測、敵機(jī)計數(shù)器的檢測,武器的移動邏輯和碰撞檢測等等)的邏輯處理。界面繪制線程負(fù)責(zé)游戲界面中所有游戲元素的繪制工作。
同時,設(shè)計線程對象的初始化和啟動工作在onCreate方法中處理,線程的銷毀工作在onDestroyed方法中,保證線程只在游戲界面可見的時候才存在和運行,防止用戶不當(dāng)操作造成線程意外死亡或重建。
五、游戲測試
圖1 歡迎界面測試效果圖
圖2為游戲菜單界面,共有六個選項供玩家選擇。
圖2 菜單界面測試效果圖
圖3為游戲場景選擇界面,選擇玩家喜歡或者想挑戰(zhàn)的場景。
圖3 場景選擇界面測試效果圖
圖4為游戲設(shè)置界面,玩家可以選擇自己喜歡的模式以及操作方式。
圖4 設(shè)置界面測試效果圖
圖5 游戲界面測試效果圖
圖5為游戲界面的測試效果圖,該界面有敵方和我方的裝備、武器、爆炸以及一些魔法。
參考文獻(xiàn)
[1]李華明.Android游戲開發(fā)之從零開始[M].清華大學(xué)出版社,2011.
[2]李剛.瘋狂Android講義精粹[M].電子工業(yè)出版社,2012.
[3]何晨光, 李洪剛.Android編程入門經(jīng)典[M].清華大學(xué)出版社,2012.
[4]熊斌編.Android多媒體開發(fā)技術(shù)實戰(zhàn)詳解[M].電子工業(yè)出版社,2012.
[5]范懷宇.Android開發(fā)精要[M].機(jī)械工業(yè)出版社,2012.
[6]楊明羽.Android語法范例參考大全[M].電子工業(yè)出版社,2012.
[7]吳亞峰,蘇亞光.Android游戲開發(fā)大全[M].人民郵電出版社,2012.
[8]李剛.瘋狂Java講義精粹[M].電子工業(yè)出版社,2012.
[9]楊豐盛.Android應(yīng)用開發(fā)揭秘[M].機(jī)械工業(yè)出版社,2010.
[10]??藸枺愱基i.Thinking in java[M].機(jī)械工業(yè)出版社,2007.
[11]葉乃文,鄺勁筠,杜永萍.Java核心技術(shù)[M].電子工業(yè)出版社,2011.
[12]http://developer.android.com/develop/index.html.
項目來源:河南省重點科技攻關(guān)計劃項目(編號:132102210054)。
作者簡介:臧利萍(1984—),女,河南焦作人,碩士,助教,現(xiàn)供職于鄭州航空工業(yè)管理學(xué)院,主要從事計算機(jī)圖形、虛擬現(xiàn)實等計算機(jī)應(yīng)用教學(xué)研究。