先贴出画飞机部分的代码,具体代码说明注释里边有
package com.example.planegame;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.view.View;
public class PlaneView extends View {
public float currentX;
public float currentY;
//创建Bitmap对象,其实就代表一张图片
Bitmap plane;
public PlaneView(Context context) {
super(context);
//定义飞机图片
plane=BitmapFactory.decodeResource(context.getResources(), R.drawable.plane);
setFocusable(true);
}
public void onDraw(Canvas canvas){
super.onDraw(canvas);
//拿到画笔
Paint p = new Paint();
//用 画笔 在 画布 的 某个位置 去画 飞机
canvas.drawBitmap(plane,currentX,currentY,p);
}
}
接着贴出具体对应的Activity里边的代码,如下所示,具体说明在注释里看
package com.example.planegame;
import android.os.Bundle;
import android.app.Activity;
import android.util.DisplayMetrics;
import android.view.Display;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnKeyListener;
import android.view.Window;
import android.view.WindowManager;
public class PlaneGameActivity extends Activity {
private int speed=10;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//去掉窗口标题。如果带着窗口标题的话,会占用一定的位置,而且飞机一开始就不是在最下边了
requestWindowFeature(Window.FEATURE_NO_TITLE);
//全屏显示
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
//创建PlaneView组件,把飞机显示出来,并且给飞机设置个背景图片
final PlaneView planeView = new PlaneView(this);
setContentView(planeView);
planeView.setBackgroundResource(R.drawable.back);
//获取窗口管理器
WindowManager windowManager = getWindowManager();
Display display = windowManager.getDefaultDisplay();
//Andorid.util 包下的DisplayMetrics 类提供了一种关于显示的通用信息,如显示大小,分辨率和字体
DisplayMetrics metrics = new DisplayMetrics();
//将当前窗口中的一些信息放在DisplayMetrics里面
display.getMetrics(metrics);
//根据窗口的一些个信息去设置飞机的起始位置
planeView.currentX = metrics.widthPixels/2;
//planeView.currentY = metrics.heightPixels-40;
planeView.currentY = metrics.heightPixels/2;
//为draw组件键盘事件绑定监听器,监听画出来的飞机这一对象
planeView.setOnKeyListener(new OnKeyListener(){
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
//获取由哪个键触发的事件
switch(event.getKeyCode()){
//控制飞机上移
case KeyEvent.KEYCODE_W:
planeView.currentY -= speed;
break;
//控制飞机下移
case KeyEvent.KEYCODE_S:
planeView.currentY += speed;
break;
//控制飞机左移
case KeyEvent.KEYCODE_A:
planeView.currentX -= speed;
break;
//控制飞机右移
case KeyEvent.KEYCODE_D:
planeView.currentX += speed;
break;
}
//通知planeView组件重画
planeView.invalidate();
return true;
}
});
}
}