• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      基于Android的飛行射擊游戲設計與實現(xiàn)

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

      賴建評

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

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

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

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

      1 飛行射擊游戲框架

      1.1游戲視圖

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

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

      1.2 SurfaceView框架

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

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

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

      2 飛行射擊游戲關鍵技術

      2.1背景滾動

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

      2.2 碰撞檢測

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

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

      2.3爆炸動畫

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

      3 飛行射擊游戲設計與實現(xiàn)

      3.1 程序流程設計

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

      3.2程序實現(xiàn)

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

      3.3 游戲運行效果

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

      4 結束語

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

      參考文獻:

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

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

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

      猜你喜歡
      游戲
      爆笑游戲
      萍乡市| 合江县| 祁门县| 余江县| 十堰市| 梁平县| 通山县| 吐鲁番市| 桐柏县| 都昌县| 芷江| 邻水| 盐源县| 靖宇县| 新野县| 京山县| 芜湖市| 鲁甸县| 咸宁市| 五大连池市| 莱西市| 吴川市| 宣武区| 泰宁县| 封开县| 西宁市| 苏州市| 绥德县| 贵德县| 岑溪市| 乐业县| 芒康县| 洞头县| 虎林市| 藁城市| 平湖市| 邵武市| 元阳县| 甘洛县| 垣曲县| 彭阳县|