郭一晶,吳文樹
基于Android的飛行射擊游戲的設計與實現
郭一晶,吳文樹
運用Android手機開發的技術,結合基本游戲開發原理,設計與實現飛行射擊的游戲。首先,介紹了開發平臺,接著,對游戲進行需求分析和總體設計,設定游戲架構為MVC模式,分為圖形繪制系統、數據同步系統、碰撞檢測系統、自動射擊系統和用戶輸入系統。最后,重點介紹了游戲各個子系統的設計、核心算法和游戲代碼的優化。
飛行射擊;游戲開發;Android
隨著手機行業的不斷發展,手機硬件性能的不斷增強,手機軟件系統的不斷完善,手機功能越來越豐富,最早只能用于通信,后來可以播放音樂、瀏覽網站、玩一些簡單的游戲,直至今日可以播放視頻,甚至玩大型的游戲,手機已然成為集合通信功能與娛樂功能為一體的設備。在此背景下,許多人投入了手機游戲開發的熱潮之中。
1.1 Android系統簡介
安卓操作系統Android平臺是谷歌收購Android公司后于2007年11月5日正式公布的一款手機操作系統平臺,Android基于Linux內核,采用了軟件疊層的架構,其架構如圖1所示[1]:

圖1 Android結構
1.2 開發環境簡介-Android SDK
SDK(software development kit)是軟件開發的工具包,被軟件開發工程師用于為特定的軟件包、軟件框架、硬件平臺和操作系統等建立應用軟件的開發工具的集合。因此,Android SDK指Android專屬的軟件開發工具包[2]。
1.3 開發工具簡介-Eclipse
Eclipse是一個開放源代碼的、基于 Java 的可擴展開發平臺。就其本身而言,它只是一個框架和一組服務,用于通過插件組件構建開發環境。幸運的是,Eclipse附帶了一個標準的插件集,包括Java開發工具(Java Development Kit,JDK)。
2.1 游戲系統需求
游戲中包含 5個系統:圖形繪制系統,數據同步系統,碰撞檢測系統,自動射擊系統和用戶輸入系統。圖形繪制系統即圖形渲染系統,是在視圖層,主要把所有的視圖元素繪制在屏幕上,這是游戲的核心。數據同步系統是視圖層與模型層之間的一個接口,保持圖形層繪制最新的數據,減少游戲延遲,從而提高游戲體驗。碰撞檢測系統是檢測游戲中的各種碰撞情況,對于飛行射擊類游戲來說,這個系統必不可少。自動射擊系統是指一進入游戲,主角飛機就自動不斷釋放子彈,因為是開發觸屏手機上的游戲,如果頻繁按射擊鍵會很不方便。用戶輸入系統主要包含了大方向盤和兩個小按鈕的事件反應,還有各個界面的按鈕事件處理,大方向盤上觸摸的位置不同會產生不同方向的按鈕效果。
2.2 游戲細節需求
為了增加游戲趣味性,游戲中需設計一些小系統,包括怒氣系統,炸彈系統,特效系統和道具系統。怒氣系統指當玩家擊落對方敵機的時候會活的一定怒氣,有了怒氣可以使用一個怒氣技能,該怒氣技能會釋放出兩個螺旋鐮刀,鐮刀碰到屏幕兩邊會反彈,鐮刀可以攻擊敵人。炸彈系統指釋放一次強大的爆炸,讓屏幕內的所有地方子彈都消失,該技能允許玩家在來不及躲避敵人子彈時自救。特效系統主要體現在游戲畫面上,敵人飛機被擊落時會發生爆炸,要在相應位置播放一個爆炸特效,玩家釋放怒氣攻擊時會在主角飛機上播放一段閃光的特效,讓玩家清楚知道使用了怒氣攻擊,玩家釋放炸彈時在主角飛機上播放一段類似保護層的光圈效果,目的是為了增加視覺享受。道具系統指游戲內玩家主角飛機可以使用3種不同類型的子彈,每種子彈有3個不同的火力等級,對應的游戲中會出現3種不同類型的道具,玩家獲得道具后就可以提升火力等級或者改變子彈的種類。
3.1 操作設計
游戲采用的操作為傳統的操作方式,控制方向的按鈕共8個,上、下、左、右、右上、左上、右下和左下。另外還有2個按鈕鍵,一個是蓄力攻擊按鈕,另一個是炸彈按鈕。方向鍵盤設計成一個大圓形,玩家觸碰到圓形的時候會根據觸碰的位置判斷是哪個方向,方向鍵的大圓形放置在屏幕底端的左邊,另外2個按鍵放置在屏幕底端的右邊。
3.2 關卡設計
游戲根據劇情需要設計了3個關卡。
第一個關卡的背景是森林背景,目的是為了與第一關卡的BOSS一條龍的形象配合。
第二個關卡的背景是工業區背景,目的是為了與第二關的BOSS機器人的形象配合。
第三個關卡的背景是宇宙空間的背景,目的是為了配合劇情需要,BOSS逃到了外星空間,而主角也追到了外星空間。
如圖2所示:
分別為各自關卡的 BOSS截圖,其中圖 2(a)、圖 2(b)和圖2(c)分別是關卡1、2和3的截圖。

圖2 各自關卡的BOSS截圖
3.3 核心算法
(1)碰撞檢測算法
要進行碰撞檢測,首先要對需要進行碰撞檢測的各個對象之間進行2D圖形建模。目前比較常見的2D模型是矩形和圓形[3]。對于兩個圓形是否發生重疊,可計算兩個圓心之間的距離。那么條件就變為:計算兩個圓心之間的距離是否小于兩個圓的半徑總和。
先寫一個碰撞模型的圓形類,然后在所有需要進行游戲碰撞檢測的對象中加入該模型,并進行該模型圓的初始化,之后每次該對象發生變化,就要更新該模型圓的狀態,判斷碰撞檢測才能準確。
關鍵代碼如下:

(2)敵人定點射擊算法
該算法主要是為敵人小兵設計,敵人小兵的攻擊方式如果只是直線射擊,那么游戲就顯得不真實,所以必須要讓小兵射擊時是采用定點射擊的模式,即敵人小兵每次發射時都會以游戲主角為目標發射子彈。
假設小兵發射子彈時在A點,此時玩家在B點,在屏幕中A點與B點形成一條直線,直線方程Y=K*X+B中,Y隨著X的變化而變化,這里的X與Y對應于游戲中是每個點的X和Y坐標。在發射子彈時還需判斷A點相對于B點的方向,如果A點在B點的左邊,那么子彈的橫坐標X就得增加,如果A點在B點的右邊,那么子彈的橫坐標X就得減少,這樣才能實現定點射擊的功能。
所以該定點射擊算法最主要的功能,是計算出Y=K*X+B中的K和B兩個參數,子彈就會按照該直線方向,根據X值的改變而改變Y的值。


3.4 后期處理
(1)代碼優化
本游戲開發中用到的代碼優化如下:①使用靜態方法,在游戲中的生成隨機數和碰撞檢測方法中使用到靜態方法。②用乘法代替除法,由于乘法運算比除法運算快,所以能夠用乘法運算的地方盡量使用乘法運算,在游戲中計算位置的地方常使用。③直接調用成員,在訪問類成員時,習慣通過getter和setter方法來訪問,是一個良好的習慣。但是getter和setter方法在訪問成員時比直接訪問成員效率低,如果只是簡單的訪問可以直接訪問成員而不通過setter和getter方法[4]。比如for(int i=0;i<object.getCount();i++){},這里每次調用 getter方法會使效率降低,如果改成 for(int i=0;i<object.count;i++){},效率就提高了。游戲中遍歷對象數組是常見的操作,比如遍歷敵人子彈數組、玩家子彈數組等,直接訪問成員可以提高效率。
(2)算法優化
圓形碰撞檢測算法中,主要就是檢測兩個圓形的圓心距。而在平面直角坐標系中要計算兩個圓形的圓心距離是要進行一次開根號運算,但是在內核運算器中進行除法或者開根號這些操作運算要消耗大量的資源和時間[5],顯然不等式兩邊同時平方不會改變不等式的值,所以改進后可不進行開根號運算。
(3)資源文件優化
游戲中畫面的顯示必須使用圖片來顯示,之前要先解碼圖片,而解碼圖片是很消耗內存的操作,根據android的內核機制,如果使用 C語言申請分配的內存空間無法再使用Java操作進行處理,這樣會造成很多內存區域變成死內存,從而導致內存過小程序無法運行,所以必須對使用的圖片資源進行優化[6]。優化圖片的工具很多,比如 CS Photoshop等。
(4)游戲數值優化
游戲的另一個細節就是游戲中各種數值的設定,比如設定BOSS血量過多,那么玩家要很久才能消滅BOSS,這樣就會讓游戲的用戶體驗下降;數值還會影響到畫面顯示,比如玩家飛機發射子彈會有一個時間間隔,如果時間間隔太小那么后面的子彈會覆蓋到前面的子彈,如果攻擊間隔太大,子彈又會顯得太空曠,讓玩家感覺到火力不夠強大。
本文簡要介紹了基本的游戲開發原理,重點討論了游戲功能系統的設計、游戲的核心算法以及游戲的優化方法。當然,本飛行射擊游戲還有一些可以繼續優化和擴展的地方,比如可以增加關卡,增加游戲的趣味系統,可以對游戲中內存資源的使用進行優化,以提高游戲運行效率和穩定性等。
[1] 顧聰,陳益強,劉軍發等.基于Android平臺的室內LBS系統設計與實現[J].計算機工程與設計,2012(1):396-401.
[2] 郝玉龍.Android程序射擊基礎[M].北京: 清華大學出版社,2011年.
[3] 吳亞鋒,蘇亞光.Android 2.0游戲開發實戰寶典[M].北京:人民郵電出版社,2010年.
[4] 林城.Google Android 2.X應用開發實戰[M].北京:清華大學出版社,2011年.
[5] 賈金玲.計算機組成原理[M].重慶: 重慶大學出版社,2011年.
[6] 李寧.Android應用開發實戰[M].北京: 機械工業出版社,2012年.
Design and Implementation of Flight Shooting Game Based on Android
Guo Yijing, Wu Wenshu
(Xiamen University TanKahKee College, Zhangzhou363105, China)
Combined with the basic principles of game development, flight shooting game is designed by using technology of Android mobile phone development. The development platform is introduced first. Then requirements analysis and system design are discussed. The development mode is set to MVC architecture. The system is divided into a graph drawing system, data synchronization system, collision detection system, automatic fire system and user input system. Finally, the game focuses on the design of each system, the core algorithm and optimization of game code.
Flight shooting; Game Development; Android
TP311
A
1007-757X(2014)06-0013-03
2014.04.22)
郭一晶(1980-),男,回族,福建仙游人,廈門大學嘉庚學院,講師,碩士,研究方向:計算機軟件與應用,福建漳州,363105
吳文樹(1989-),男,福建漳州人,廈門大學嘉庚學院,研究方向:軟件工程,福建漳州,363105