Android開源 - 仿微信打飛機游戲

123z113 8年前發布 | 14K 次閱讀 Android Android開發 移動開發

游戲說明

  1. 飛機一直發射子彈,用手指滑動可以改變飛機的位置
  2. 不同的敵機抗擊打能力不同,當敵機被擊中一定子彈數量時會爆炸,爆炸有動畫效果
  3. 每隔一段時間都會有雙發子彈或炸彈等道具獎勵
  4. 獲得雙發子彈之后,子彈變為雙發
  5. 獲得炸彈道具之后,可以通過雙擊將屏幕內的所有敵機炸毀

    這里寫圖片描述

     

實現

  • 我們定義了Sprite類,即精靈類,游戲中的飛機、子彈、獎勵道具等都是繼承自該類,我們通過moveTo()、move()等方法控制精靈的位置,通過beforeDraw()、onDraw()、afterDraw()實現相應的繪圖邏輯。精靈類及其子類繼承如下所示:

    這里寫圖片描述

  • GameView是我們自定義的View類,主要重寫了onDraw()onTouchEvent()方法。onDraw()源碼如下所示:

    <code>@Override
    protected void onDraw(Canvas canvas) {
        //我們在每一幀都檢測是否滿足延遲觸發單擊事件的條件
        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);
    }
    

    } </code></pre>

    在某一時刻GameView有三種狀態:游戲開始STATUS_GAME_STARTED、游戲暫停STATUS_GAME_PAUSED和游戲結束STATUS_GAME_OVER。在不同的狀態下我們會調用不同的繪制方法,這幾個方法中都會調用方法postInvalidate(),這樣驅動著View不斷重繪,進而不斷調用onDraw()方法實現游戲的動態效果。關于繪圖技巧,可以參見另一篇博文《Android中Canvas繪圖基礎詳解(附源碼下載)》

    </li>
  • 我們也重寫了GameView的onTouchEvent()方法。由于View只支持單擊事件,而不支持雙擊事件,所以我們自己定義了一個resolveTouchType()方法,通過這個方法可以合成我們自己想要的事件類型,比如雙擊事件。我們記錄MotionEvent.ACTION_DOWNMotionEvent.ACTION_UP的時間,一次單擊事件由ACTION_DOWN和ACTION_UP兩個事件合成,假設從ACTION_DOWN到ACTION_UP間隔小于200毫秒,我們就認為發生了一次單擊事件。一次雙擊事件由兩個點擊事件合成,兩個單擊事件之間小于300毫秒,我們就認為發生了一次雙擊事件。在觸發了雙擊事件的時候,我們就會觸發炸彈,將屏幕內的敵機都炸毀。當處于ACTION_MOVE狀態時,我們就通過event.getX()event.getY()改變戰斗機的位置。關于MotionEvent的詳細信息可以參另一篇博文《Android中TouchEvent觸摸事件機制》

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

  • 小敵機類,體積小,抗打擊能力低;中敵機類,體積中等,抗打擊能力中等;大敵機類,體積大,抗打擊能力強。當敵機銷毀的時候,我們使用了爆炸效果,使用了如下的圖片: 這里寫圖片描述

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

  • </ul>

     

 本文由用戶 123z113 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!