?

基于Android的飛行射擊游戲設計與實現

2016-06-14 19:57賴建評
電腦知識與技術 2016年12期
關鍵詞:游戲

賴建評

摘要:基于Android的游戲應用,是Android市場中最重要的組成部分,而飛行射擊類游戲是經典的游戲類型之一。該文采用Android平臺,分析設計了Android飛行射擊游戲開發的總體框架,研究Android飛行射擊游戲開發相關的技術,包括SurfaceView視圖、背景滾動、碰撞檢測等、爆炸動畫等,設計實現飛行射擊游戲開發。

關鍵詞:Android;飛行射擊;游戲

中圖分類號:TP311 文獻標識碼:A 文章編號:1009-3044(2016)12-0073-02

游戲發展至今,劃分出了休閑益智、體育競速、動作冒險、飛行射擊、經營策略、角色扮演等游戲類型。在眾多的游戲分類中,飛行射擊游戲是發展較早的游戲類型之一,在電子游戲的歷史演變過程中扮演了重要的角色,留下很多經典的代表作,如“斑鳩”、“1945”、“雷電”等。隨著Android智能終端的普及,飛行射擊游戲在Android平臺,通過用戶觸屏直接控制飛機,能給用戶帶來更刺激、更暢快的體驗。本文基于Android平臺,分析相關開發技術,設計實現一款飛行射擊游戲。

1 飛行射擊游戲框架

1.1游戲視圖

在Android游戲開發中,游戲界面需要用到大量的圖片資源和處理圖像特效,如果采用Android應用開發中單純的XML布局界面,會造成界面刷新時間過長、事件處理等待太久等問題。為解決以上問題,在Android游戲中采用自定義視圖繼承View或SurfaceView實現游戲界面繪制。

View對畫布的重新繪制,通過該類的invalidate()或postInvalidate()完成,畫布由系統的UI主線程進行更新。而SurfaceView中內嵌有Surface對象,Surface是在后臺線程中繪制,畫布的重繪由新線程完成。在飛行射擊游戲中,游戲界面的物體是動態變化的,需要在游戲過程中不斷重新繪制,因此選擇SurfaceView視圖,能夠避免主線程阻塞,提高程序反應速度,SurfaceView更適合用于飛行射擊游戲開發。

1.2 SurfaceView框架

SurfaceView繼承View,包含SurfaceHolder接口的實現實例,對外提供該實例的訪問接口。SurfaceHolder里包含對SurfaceView內嵌的 Surface進行控制的接口,能夠獲取Surface、更改Surface顯示內容及監聽Surface狀態事件。

Surface狀態事件的監聽通過重寫以下三個函數實現:surfaceCreated(),當SurfaceView首次創建后調用,在該函數中完成繪制界面相關信息的初始化工作;surfaceChanged(),當SurfaceView的尺寸發生改變的時候調用,在surfaceCreated運行后會首次被調用;surfaceDestroyed(),當SurfaceView被銷毀前調用,如退出游戲畫面,在該函數中停止繪圖線程和清理使用的資源。

SurfaceView采用了雙緩沖技術,在繪圖前通過SurfaceHolder的lockCanvas()獲取Canvas,在 Canvas上繪制內容,繪制完成后調用SurfaceHolder的unlockCanvasAndPost(),把畫布中的內容提交到Surface渲染顯示,這種雙緩沖技術能夠避免更新視圖時畫面閃爍。在線程的run方法中循環調用繪圖函數,實現動態刷新屏幕。

2 飛行射擊游戲關鍵技術

2.1背景滾動

在飛行射擊游戲運行后,通過用戶點擊“開始”按鍵,啟動游戲進入主界面,此時游戲的背景一般是用同一張圖片,在游戲過程中不斷從上到下滾動,使得飛機在游戲界面中給玩家留下不斷飛行的錯覺。為實現這一效果,設計一張上、下兩邊沿能夠銜接過渡的背景圖片,設置兩個位圖A、B初始化為同一背景圖,通過繪圖控制兩個位圖A、B前后連接一起向下移動,當A的上邊到達屏幕底部后,把A設置到B的上方,當B到達屏幕的底部后,把B設置到A 的上方,不斷循環以上過程,實現背景不斷向下滾動的效果,該過程如圖1所示。

2.2 碰撞檢測

游戲開發經常需要進行碰撞檢測處理,飛行射擊游戲中要判斷子彈是否擊中飛機,然后根據檢測的結果做出不同的處理。在手機游戲開發中最常用到三種檢測碰撞的方式,包括矩形碰撞、圓形碰撞和像素碰撞檢測。當碰撞檢測的物體形狀比較復雜時,需要進行組合碰撞檢測,將復雜物體分解成多個基本形狀的組合,然后分別進行碰撞檢測。本程序中用到的角色形狀近似矩形,下面只討論矩形碰撞檢測的其中一種實現方式。

矩形碰撞檢測是通過兩個矩形之間的位置關系,判斷它們是否發生碰撞。兩個矩形之間不碰撞時的位置關系有圖2所示的四種情況:當矩形A的右端比矩形B的左端靠左,或矩形A的左端比矩形B的右端靠右,或矩形A的下端比矩形B的上端靠上,或矩形A的上端比矩形B的下端靠下時,兩個矩形不可能發生碰撞。根據德摩根定律,求不碰撞情況下的否定,既為碰撞情況:在水平方向上,矩形A的右端比矩形B的左端靠右,并且矩形A的左端比矩形B的右端靠左,同時在垂直方向上矩形A的下端比矩形B的上端靠下,并且矩形A的上端比矩形B的下端靠上時,兩個矩形發生碰撞。

2.3爆炸動畫

Android游戲開發中,爆炸效果可以用逐幀動畫實現。逐幀動畫實現有兩種方式:當每一幀是單獨一張圖片時,可以通過XML資源設置animation-list定義每一幀圖片和播放時間,在碰撞點播放該逐幀動畫;當多個幀的圖片合并在一張圖片里面的時候,需要通過畫布的剪切區域,更改剪切區域位置,依次在碰撞點繪制顯示每一幀。在本文中,采用第二種方式實現爆炸動畫效果。

3 飛行射擊游戲設計與實現

3.1 程序流程設計

游戲中設計了玩家飛機、敵機和Boss角色。程序運行后,進入菜單界面,點擊開始進入游戲界面。進入游戲界面后,背景和敵機不斷從上到下移動,同時敵機發射子彈,當敵機移動到屏幕底部或者被玩家擊中后,敵機爆炸,隨后敵機在屏幕上方重新出現;在游戲狀態下,玩家通過觸屏控制飛機上、下、左、右飛行,并不斷向上發射子彈,玩家飛機被擊中后減少血量,當玩家能夠擊中足夠多的敵機時,通關成功,否則游戲失敗。

3.2程序實現

程序主體框架使用自定義視圖類繼承SurfaceView并實現SurfaceHolder.Callback和Runnable接口。線程的run()方法不斷循環調用邏輯處理模塊和繪圖方法,根據玩家操作所處的階段,完成游戲初始狀態、游戲進行狀態、游戲結束狀態界面更新繪制。初始狀態菜單繪制使用GameMenu類完成,實現初始歡迎界面;游戲過程中通過GameBg類設置背景循環滾動,Player類完成玩家飛機飛行繪制、玩家飛機與敵機碰撞檢測、玩家飛機與敵機子彈碰撞檢測,Enemy類完成敵機飛行繪制、敵機與玩家飛機子彈碰撞檢測,Boss類完成Boss飛行繪制、Boss與玩家飛機碰撞檢測,Bullet完成子彈飛行繪制,Boom類完成爆炸效果動畫顯示。

3.3 游戲運行效果

通過使用SurfaceView視圖,應用背景滾動和矩形碰撞檢測技術,實現完成的飛行射擊游戲運行效果如圖3所示。

4 結束語

本文介紹了Android游戲開發中的SurfaceView視圖,研究了飛行射擊游戲開發過程中背景滾動、碰撞檢測、爆炸動畫等關鍵技術,設計實現了Android飛行射擊游戲的框架開發,經過運行測試,該游戲運行流暢、穩定,后期為了增強趣味性,可以在游戲中增加武器選擇、音效等開發。

參考文獻:

[1] 吳新華,萬強.基于Android平臺的手機游戲開發[J].萍鄉學院學報,2015,12(32).

[2] 李華明.Android游戲編程之從零開始[M].北京:清華大學出版社,2011.

[3] 吳亞峰,于復興,杜化美.Android游戲開發大全[M].北京:人民郵電出版社,2013.

猜你喜歡
游戲
爆笑游戲
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合