在本次教程中,我们将完成小球这个类的编写
  首先给大家看下小球这个类的类图:

  主要确定小球的坐标:x,y。小球的半径:r。以及小球的运动函数和如何讲小球画在屏幕上的draw()函数。
  难点是:move()函数。我们将简单的模拟一个物理环境,使小球看上去显得很有弹性。具体关于这部分,我会在接下去的文章中进行解答。
  下面给出Ball.java的代码
Java代码
    - package jumpball.game;    
-     
- import Android.graphics.Canvas;    
- import android.graphics.Color;    
- import android.graphics.Paint;    
-     
- public class Ball {    
-     float r, x, y;    
-     private Paint mPaint;    
-       
-     float MAXVERTICALSPEED = -16, MAXVERTICALA = 1;    
-       
-     float defaultJumpHight;    
-       
-     float verticalMove;    
-     float ha = 0, va = 1f, v0v, vtv, v0h, vth;    
-     GameView gameView;    
-     
-     public Ball(GameView gameView) {    
-         this.gameView = gameView;    
-         mPaint = new Paint();    
-         mPaint.setColor(Color.BLACK);    
-         defaultJumpHight = gameView.height / 3;    
-         r = gameView.width / 36;    
-         y = gameView.height - r * 2;    
-         x = gameView.width / 2 - r;    
-           
-         MAXVERTICALSPEED = -(int) ((float) Math.sqrt(2 * gameView.height / 3) - 1);    
-         verticalMove = defaultJumpHight;    
-         v0v = MAXVERTICALSPEED;    
-     }    
-     
-     public void draw(Canvas canvas) {    
-         move();    
-         canvas.drawCircle(x, y, r, mPaint);    
-     }    
-     
-     public void move() {    
-           
-         vtv = v0v + va;    
-           
-         if (vtv > -5 * MAXVERTICALSPEED / 8) {    
-             va = 0.4f;    
-         } else {    
-             va = MAXVERTICALA;    
-         }    
-           
-         if (verticalMove > defaultJumpHight && vtv < 0) {    
-             vtv = MAXVERTICALSPEED;    
-         }    
-         float vMove = (v0v + vtv) / 2;   
-         verticalMove = verticalMove + vMove;  
-         y = y + vMove;    
-         v0v = vtv;    
-         if (y > gameView.height) {  
-             y = gameView.height - this.r;    
-             v0v = MAXVERTICALSPEED;    
-             verticalMove = defaultJumpHight;    
-         }    
-     }    
- }    
  在GameVIew类里面定义一个小球对象。
  在GameView的构造方法里面进行实例化
Java代码
    - ball=new Ball(this);    
  同时在GameView的mDraw函数里面添加
Java代码
    - ball.draw(mCanvas);    
  这样我们就完成了ball对象...娃哈哈~(游戏 已经有点样子了!)
  运行程序。我们就能看到一个有弹性的小球了,在那边跳啊跳~~~~
  最后我们完成小球的左右移动。这部分比较简单~~~
  在GameView定义两个boolean变量表示左右键是否按下
  同时重写两个方法
Java代码
    - public boolean onKeyDown(int keyCode, KeyEvent event) {    
-     if (keyCode == KeyEvent.KEYCODE_BACK) {    
-         gameActivity.finish();    
-         return true;    
-     } else if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT) {    
-         leftKeyDown = true;    
-     } else if (keyCode == KeyEvent.KEYCODE_DPAD_RIGHT) {    
-          rightKeyDown = true;    
-     }    
-     return true;    
- }    
- public boolean onKeyUp(int keyCode, KeyEvent event) {    
-     if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT) {    
-          leftKeyDown = false;    
-     } else if (keyCode == KeyEvent.KEYCODE_DPAD_RIGHT) {    
-          rightKeyDown = false;    
-     }    
-     return true;    
- }    
  然后在小球的move方法里面添加:
Java代码
    -   
- if(gameView.leftKeyDown==true){    
-     xx=x-10;    
- }    
- if(gameView.rightKeyDown==true){    
-     xx=x+10;                 
- }    
- if (x < r) {    
-     x = r;    
- }    
- if (x > gameView.width - r) {    
-     x = gameView.width - r;    
- }    
  本来写到这里就已经完成了小球的左右移动,但是实际运行却发现根本移动不了~~~
  我查了下资料发现问题在这:
  我们自己定义的View,必须获得焦点之后才会调用onKeyDown方法~而Activty的onKeyDown方法是当所有空控件均没处理的时候才会被调用。
  所以我们在GameView的构成方法里面添加一句:
Java代码
    - setFocusable(true);    
  好了。。。大功告成~~~~这样我们就可以控制小球的移动了!!!
  关于小球move函数,我会在视频中详细的讲解~~~
  下面贴出程序的运行效果图:

       以及项目的一个结构:
