[GitHub開源]Android自定義View實現(xiàn)微信打飛機游戲

之前寫了很多自定義View理論方面的文章祟峦,具體可以參見《Android中自定義View、ViewGroup理論基礎詳解》 副渴。 理論指導實踐翼悴,本博文演示了如何通過自定義View實現(xiàn)微信打飛機游戲。

全部源碼已經(jīng)開源到GitHub隔缀,如果覺得不錯题造,歡迎大家Star和Fork!

GitHub: https://github.com/iSpring/GamePlane/


游戲說明

  1. 飛機一直發(fā)射子彈猾瘸,用手指滑動可以改變飛機的位置
  2. 不同的敵機抗擊打能力不同界赔,當敵機被擊中一定子彈數(shù)量時會爆炸,爆炸有動畫效果
  3. 每隔一段時間都會有雙發(fā)子彈或炸彈等道具獎勵
  4. 獲得雙發(fā)子彈之后牵触,子彈變?yōu)殡p發(fā)
  5. 獲得炸彈道具之后淮悼,可以通過雙擊將屏幕內(nèi)的所有敵機炸毀
這里寫圖片描述
這里寫圖片描述

實現(xiàn)

  • 我們定義了Sprite類,即精靈類揽思,游戲中的飛機袜腥、子彈、獎勵道具等都是繼承自該類钉汗,我們通過moveTo()羹令、move()等方法控制精靈的位置鲤屡,通過beforeDraw()、onDraw()福侈、afterDraw()實現(xiàn)相應的繪圖邏輯酒来。精靈類及其子類繼承如下所示:
這里寫圖片描述
  • GameView是我們自定義的View類,主要重寫了onDraw()onTouchEvent()方法癌刽。onDraw()源碼如下所示:

    @Override
    protected void onDraw(Canvas canvas) {
        //我們在每一幀都檢測是否滿足延遲觸發(fā)單擊事件的條件
        if(isSingleClick()){
            onSingleClick(touchX, touchY);
        }
    
        super.onDraw(canvas);
    
        if(status == STATUS_GAME_STARTED){
            drawGameStarted(canvas);
        }else if(status == STATUS_GAME_PAUSED){
            drawGamePaused(canvas);
        }else if(status == STATUS_GAME_OVER){
            drawGameOver(canvas);
        }
    }
    

    在某一時刻GameView有三種狀態(tài):游戲開始STATUS_GAME_STARTED役首、游戲暫停STATUS_GAME_PAUSED和游戲結(jié)束STATUS_GAME_OVER。在不同的狀態(tài)下我們會調(diào)用不同的繪制方法显拜,這幾個方法中都會調(diào)用方法postInvalidate()衡奥,這樣驅(qū)動著View不斷重繪,進而不斷調(diào)用onDraw()方法實現(xiàn)游戲的動態(tài)效果远荠。關(guān)于繪圖技巧矮固,可以參見另一篇博文《Android中Canvas繪圖基礎詳解(附源碼下載)》

  • 我們也重寫了GameView的onTouchEvent()方法譬淳。由于View只支持單擊事件档址,而不支持雙擊事件,所以我們自己定義了一個resolveTouchType()方法邻梆,通過這個方法可以合成我們自己想要的事件類型守伸,比如雙擊事件。我們記錄MotionEvent.ACTION_DOWNMotionEvent.ACTION_UP的時間浦妄,一次單擊事件由ACTION_DOWN和ACTION_UP兩個事件合成尼摹,假設從ACTION_DOWN到ACTION_UP間隔小于200毫秒,我們就認為發(fā)生了一次單擊事件剂娄。一次雙擊事件由兩個點擊事件合成蠢涝,兩個單擊事件之間小于300毫秒,我們就認為發(fā)生了一次雙擊事件阅懦。在觸發(fā)了雙擊事件的時候和二,我們就會觸發(fā)炸彈,將屏幕內(nèi)的敵機都炸毀耳胎。當處于ACTION_MOVE狀態(tài)時惯吕,我們就通過event.getX()event.getY()改變戰(zhàn)斗機的位置。關(guān)于MotionEvent的詳細信息可以參另一篇博文《Android中TouchEvent觸摸事件機制》怕午。

  • 我們還為GameView提供了start()混埠、pause()、resume()和destroy()等方法诗轻,使其具備類似于Activity的生命周期钳宪,方便在Activity中對GameView進行狀態(tài)管理。

  • 小敵機類,體積小吏颖,抗打擊能力低凉馆;中敵機類丁恭,體積中等拘央,抗打擊能力中等式塌;大敵機類,體積大缩多,抗打擊能力強呆奕。當敵機銷毀的時候,我們使用了爆炸效果衬吆,使用了如下的圖片:


    這里寫圖片描述

這張圖片演示了爆炸從開始到結(jié)束14個階段的效果圖梁钾,我們用兩幀繪制爆炸的一個階段,這樣完整繪制一個爆炸效果需要28幀逊抡,在繪制完最后一個階段之后姆泻,Explosion類會銷毀自己。

全部源碼已經(jīng)開源到GitHub冒嫡,如果覺得不錯拇勃,歡迎大家Star和Fork!

GitHub: https://github.com/iSpring/GamePlane/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末孝凌,一起剝皮案震驚了整個濱河市方咆,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蟀架,老刑警劉巖瓣赂,帶你破解...
    沈念sama閱讀 211,639評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異辜窑,居然都是意外死亡,警方通過查閱死者的電腦和手機寨躁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評論 3 385
  • 文/潘曉璐 我一進店門穆碎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人职恳,你說我怎么就攤上這事所禀。” “怎么了放钦?”我有些...
    開封第一講書人閱讀 157,221評論 0 348
  • 文/不壞的土叔 我叫張陵色徘,是天一觀的道長。 經(jīng)常有香客問我操禀,道長褂策,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,474評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮斤寂,結(jié)果婚禮上耿焊,老公的妹妹穿的比我還像新娘。我一直安慰自己遍搞,他們只是感情好罗侯,可當我...
    茶點故事閱讀 65,570評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著溪猿,像睡著了一般钩杰。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上诊县,一...
    開封第一講書人閱讀 49,816評論 1 290
  • 那天讲弄,我揣著相機與錄音,去河邊找鬼翎冲。 笑死垂睬,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的抗悍。 我是一名探鬼主播驹饺,決...
    沈念sama閱讀 38,957評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼缴渊!你這毒婦竟也來了赏壹?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,718評論 0 266
  • 序言:老撾萬榮一對情侶失蹤衔沼,失蹤者是張志新(化名)和其女友劉穎蝌借,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體指蚁,經(jīng)...
    沈念sama閱讀 44,176評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡菩佑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,511評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了凝化。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片稍坯。...
    茶點故事閱讀 38,646評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖搓劫,靈堂內(nèi)的尸體忽然破棺而出瞧哟,到底是詐尸還是另有隱情,我是刑警寧澤枪向,帶...
    沈念sama閱讀 34,322評論 4 330
  • 正文 年R本政府宣布勤揩,位于F島的核電站,受9級特大地震影響秘蛔,放射性物質(zhì)發(fā)生泄漏陨亡。R本人自食惡果不足惜傍衡,卻給世界環(huán)境...
    茶點故事閱讀 39,934評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望数苫。 院中可真熱鬧聪舒,春花似錦、人聲如沸虐急。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽止吁。三九已至被辑,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間敬惦,已是汗流浹背盼理。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留俄删,地道東北人宏怔。 一個月前我還...
    沈念sama閱讀 46,358評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像畴椰,于是被迫代替她去往敵國和親臊诊。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,514評論 2 348

推薦閱讀更多精彩內(nèi)容