当前位置:操作系统 > 安卓/Android >>

Android_手把手教你写跳跃类游戏(2)

这是第二篇博客,在本次教程中,我们将完成小球这个类的编写

首先给大家看下小球这个类的类图:

 \

 

主要确定小球的坐标: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; 
    // 最大垂直速度 方向向上 -16.  
    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; 
        //根据加速度公式计算得出Vt^2-V0^2=2AX  
        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() { 
        // Vt=V0+aT 当前速度=初始速度+加速度*时间  
        vtv = v0v + va; 
        // 当下降速度达到一定程度时,设置加速度为0.4f。  
        if (vtv > -5 * MAXVERTICALSPEED / 8) { 
            va = 0.4f; 
        } else { 
            va = MAXVERTICALA; 
        } 
        // 当当前还需上升的高度 大于默认高度时,速度继续保持最大速度,vtv<0表示方向向上  
        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; 
        } 
    } 

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;
 // 最大垂直速度 方向向上 -16.
 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;
  //根据加速度公式计算得出Vt^2-V0^2=2AX
  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() {
  // Vt=V0+aT 当前速度=初始速度+加速度*时间
  vtv = v0v + va;
  // 当下降速度达到一定程度时,设置加速度为0.4f。
  if (vtv > -5 * MAXVERTICALSPEED / 8) {
   va = 0.4f;
  } else {
   va = MAXVERTICALA;
  }
  // 当当前还需上升的高度 大于默认高度时,速度继续保持最大速度,vtv<0表示方向向上
  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类里面定义一个小球对象。

[java] Ball ball; 
Ball ball;
在GameView的构造方法里面进行实例化

[html] ball=new Ball(this); 
ball=new Ball(this);
同时在GameView的mDraw函数里面添加

[html] ball.draw(mCanvas); 
ball.draw(mCanvas);
这样我们就完成了ball对象...娃哈哈~(游戏 已经有点样子了!)

运行程序。我们就能看到一个有弹性的小球了,在那边跳啊跳~~~~

 

最后我们完成小球的左右移动。这部分比较简单~~~

在GameView定义两个boolean变量表示左右键是否按下

同时重写两个方法

[html] public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_BACK) { 
        gameActivity.finish();&n

补充:移动开发 , Android ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,