Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android游戲 >> Android游戲開發 >> Android游戲開發教程:手把手教你寫跳躍類游戲(二)

Android游戲開發教程:手把手教你寫跳躍類游戲(二)

編輯:Android游戲開發

  在本次教程中,我們將完成小球這個類的編寫

  首先給大家看下小球這個類的類圖:

Android游戲開發教程:手把手教你寫跳躍類游戲(二)

  主要確定小球的坐標:x,y。小球的半徑:r。以及小球的運動函數和如何講小球畫在屏幕上的draw()函數。

  難點是:move()函數。我們將簡單的模擬一個物理環境,使小球看上去顯得很有彈性。具體關於這部分,我會在接下去的文章中進行解答。

  下面給出Ball.java的代碼

Java代碼
  1. package jumpball.game;    
  2.     
  3. import Android.graphics.Canvas;    
  4. import android.graphics.Color;    
  5. import android.graphics.Paint;    
  6.     
  7. public class Ball {    
  8.     float r, x, y;    
  9.     private Paint mPaint;    
  10.     // 最大垂直速度 方向向上 -16.     
  11.     float MAXVERTICALSPEED = -16, MAXVERTICALA = 1;    
  12.     // 默認最大高度     
  13.     float defaultJumpHight;    
  14.     // 小球在垂直方向上需要移動的距離!     
  15.     float verticalMove;    
  16.     float ha = 0, va = 1f, v0v, vtv, v0h, vth;    
  17.     GameView gameView;    
  18.     
  19.     public Ball(GameView gameView) {    
  20.         this.gameView = gameView;    
  21.         mPaint = new Paint();    
  22.         mPaint.setColor(Color.BLACK);    
  23.         defaultJumpHight = gameView.height / 3;    
  24.         r = gameView.width / 36;    
  25.         y = gameView.height - r * 2;    
  26.         x = gameView.width / 2 - r;    
  27.         //根據加速度公式計算得出Vt^2-V0^2=2AX     
  28.         MAXVERTICALSPEED = -(int) ((float) Math.sqrt(2 * gameView.height / 3) - 1);    
  29.         verticalMove = defaultJumpHight;    
  30.         v0v = MAXVERTICALSPEED;    
  31.     }    
  32.     
  33.     public void draw(Canvas canvas) {    
  34.         move();    
  35.         canvas.drawCircle(x, y, r, mPaint);    
  36.     }    
  37.     
  38.     public void move() {    
  39.         // Vt=V0+aT 當前速度=初始速度+加速度*時間     
  40.         vtv = v0v + va;    
  41.         // 當下降速度達到一定程度時,設置加速度為0.4f。     
  42.         if (vtv > -5 * MAXVERTICALSPEED / 8) {    
  43.             va = 0.4f;    
  44.         } else {    
  45.             va = MAXVERTICALA;    
  46.         }    
  47.         // 當當前還需上升的高度 大於默認高度時,速度繼續保持最大速度,vtv<0表示方向向上     
  48.         if (verticalMove > defaultJumpHight && vtv < 0) {    
  49.             vtv = MAXVERTICALSPEED;    
  50.         }    
  51.         float vMove = (v0v + vtv) / 2; // 這一次垂直高度移動距離。     
  52.         verticalMove = verticalMove + vMove;// 減小時,表示網上移動了     
  53.         y = y + vMove;    
  54.         v0v = vtv;    
  55.         if (y > gameView.height) {// 觸地了     
  56.             y = gameView.height - this.r;    
  57.             v0v = MAXVERTICALSPEED;    
  58.             verticalMove = defaultJumpHight;    
  59.         }    
  60.     }    
  61. }    

  在GameVIew類裡面定義一個小球對象。

Java代碼
  1. Ball ball;    

  在GameView的構造方法裡面進行實例化

Java代碼
  1. ball=new Ball(this);    

  同時在GameView的mDraw函數裡面添加

Java代碼
  1. ball.draw(mCanvas);    

  這樣我們就完成了ball對象...娃哈哈~(游戲 已經有點樣子了!)

  運行程序。我們就能看到一個有彈性的小球了,在那邊跳啊跳~~~~

  最後我們完成小球的左右移動。這部分比較簡單~~~

  在GameView定義兩個boolean變量表示左右鍵是否按下

  同時重寫兩個方法

Java代碼
  1. public boolean onKeyDown(int keyCode, KeyEvent event) {    
  2.     if (keyCode == KeyEvent.KEYCODE_BACK) {    
  3.         gameActivity.finish();    
  4.         return true;    
  5.     } else if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT) {    
  6.         leftKeyDown = true;    
  7.     } else if (keyCode == KeyEvent.KEYCODE_DPAD_RIGHT) {    
  8.          rightKeyDown = true;    
  9.     }    
  10.     return true;    
  11. }    
  12. public boolean onKeyUp(int keyCode, KeyEvent event) {    
  13.     if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT) {    
  14.          leftKeyDown = false;    
  15.     } else if (keyCode == KeyEvent.KEYCODE_DPAD_RIGHT) {    
  16.          rightKeyDown = false;    
  17.     }    
  18.     return true;    
  19. }    

  然後在小球的move方法裡面添加:

Java代碼
  1. //水平移動設置    
  2. if(gameView.leftKeyDown==true){    
  3.     xx=x-10;    
  4. }    
  5. if(gameView.rightKeyDown==true){    
  6.     xx=x+10;                 
  7. }    
  8. if (x < r) {    
  9.     x = r;    
  10. }    
  11. if (x > gameView.width - r) {    
  12.     x = gameView.width - r;    
  13. }    

  本來寫到這裡就已經完成了小球的左右移動,但是實際運行卻發現根本移動不了~~~

  我查了下資料發現問題在這:

  我們自己定義的View,必須獲得焦點之後才會調用onKeyDown方法~而Activty的onKeyDown方法是當所有空控件均沒處理的時候才會被調用。

  所以我們在GameView的構成方法裡面添加一句:

Java代碼
  1. setFocusable(true);    

  好了。。。大功告成~~~~這樣我們就可以控制小球的移動了!!!

  關於小球move函數,我會在視頻中詳細的講解~~~

  下面貼出程序的運行效果圖:

Android游戲開發教程:手把手教你寫跳躍類游戲(二)

       以及項目的一個結構:

Android游戲開發教程:手把手教你寫跳躍類游戲(二)

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved