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 ,