android游戏开发学习笔记五(学习书籍 Android游戏编程之从零开始)

/**
* 剪切动画+移动位图
*
* @author 岳振华
*
*/
public class ClipSurfaceView extends SurfaceView implements Callback, Runnable {
private SurfaceHolder sfh;
private int screenX, screenY;// 屏幕大小
private Thread thread;
private boolean flag;
private Paint paint, paint2;
private Canvas canvas;
private Bitmap fish, water;
private int currentFream = 0;
private float bmpX, bmpY;


public ClipSurfaceView(Context context) {
super(context);
sfh = this.getHolder();
sfh.addCallback(this);


paint = new Paint();
paint2 = new Paint();
paint.setColor(Color.RED);
paint2.setColor(Color.WHITE);
paint.setAntiAlias(true);
this.setFocusable(true);
fish = BitmapFactory.decodeResource(this.getResources(), R.drawable.fish);
water = BitmapFactory.decodeResource(this.getResources(), R.drawable.water);
}


@Override
public void surfaceCreated(SurfaceHolder holder) {
screenX = getWidth();
screenY = getHeight();


// 宽度刚好填满屏幕
bmpX = -water.getWidth() + screenX;
// 高度是屏幕高度-图片高度
bmpY = screenY - water.getHeight();


flag = true;
thread = new Thread(this);
thread.start();
}


@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {


}


@Override
public void surfaceDestroyed(SurfaceHolder holder) {
flag = false;
}


@SuppressWarnings("static-access")
@Override
public void run() {
while (flag) {
try {
// begin
long begin = System.currentTimeMillis();
draw();
logic();
// end
long end = System.currentTimeMillis();
if (end - begin < 50) {
thread.sleep(50 - (end - begin));
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}


}


/**
* 绘图
*/
private void draw() {
try {
canvas = sfh.lockCanvas();
if (null != canvas) {
canvas.drawColor(Color.WHITE);
// 设置可见区域的大小
canvas.save();
canvas.clipRect(0, 0, fish.getWidth() / 10, fish.getHeight());


// 绘制鱼
canvas.drawBitmap(fish, -currentFream * fish.getWidth() / 10, 0, paint);
canvas.restore();
// 绘制水
canvas.drawBitmap(water, bmpX, bmpY, paint2);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (null != canvas) {
sfh.unlockCanvasAndPost(canvas);
}
}
}


/**
* 游戏逻辑
*/
private void logic() {
currentFream++;
if (currentFream >= 10) {
currentFream = 0;
}
if (bmpX < 0) {
bmpX += 5;
} else {
bmpX = -water.getWidth() + screenX;
}


}


}

猜你喜欢

转载自201206260201.iteye.com/blog/1688880