这里调用就报错:
if ((p[0] >= activity.x1 - 80) && (p[0] <= activity.x1 + 80) && (p[1] >= activity.y1 - 16)
&& (p[1] <=activity.y1 + 16)) {
activity.onStop();
return;
}
// 撞墙
if ((p[0] < 16) || (p[1] < 16) || (p[0] > activity.screenW - 16) || (p[1] > activity.screenH - 16)) {
activity.onStop();
// activity.onResume();
return;
}
下面是代码:
public class GameThread extends Thread {
private GameView view;
private SurfaceHolder holder;
public boolean pauseFlag = false;// 是否暂停
public GameThread(GameView view) {
this.view = view;
holder = view.getHolder();
}
@Override
public void run() {
Canvas canvas;
while (true) {
canvas = null;
if (!pauseFlag) {
try {
canvas = holder.lockCanvas();
synchronized (holder) {
view.drawGame(canvas);
}
} finally {
if (canvas != null) {
holder.unlockCanvasAndPost(canvas);
}
}
}
try {
Thread.sleep(200);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
public class MainActivity extends Activity {
private GameView gameView;
private GestureDetector gestureDetector;// 处理手势
public int fx = 0; // 食物的X坐标
public int fy = 0;// 食物的Y坐标
public int size = 16; // 蛇身的大小
public int changdu = 2;// 蛇身长度
public int direction = 3;// 蛇的移动方向,分别使用 0上,1下,2左,3右
public int x = 16; // 移动的X坐标
public int y = 16; // 移动的Y坐标
public int x1 = 0; // 障碍物X坐标
public int y1 = 0; // Y坐标
public ArrayList<int[]> path = new ArrayList<int[]>();// 记录运行的路径
public HashMap<Integer, Integer> roadBlock = new HashMap<Integer, Integer>();// 障碍物
public int screenW; // 屏幕的宽度
public int screenH; // 屏幕的高度
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 初始化视图
initView();
// 初始化地图
initMap();
// 初始化游戏(手势)
initGame();
}
private void initGame() {
gestureDetector = new BuileGesture(this, new BuileGesture.OnGestureResult() {
@Override
public void onGestureResult(int direction) {
// 获取从手势处理类得到的手势方向
MainActivity.this.direction = direction;
Toast.makeText(MainActivity.this, "方向:" + direction, Toast.LENGTH_SHORT).show();
}
}).Builde();
}
private void initMap() {
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
screenW = metrics.widthPixels;
screenH = metrics.heightPixels;
// 初始化食物
Random rd = new Random(System.currentTimeMillis());
int tempX = rd.nextInt(screenW / 16);
int tempY = rd.nextInt(screenH / 16); // ...
fx = tempX * 16;
fy = tempY * 16;
// 初始化障碍物
x1=screenW/2;
y1=screenH/2;
}
private void initView() {
// 去标题栏
requestWindowFeature(Window.FEATURE_NO_TITLE);
// 设置全屏
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
// 绑定视图
gameView = new GameView(MainActivity.this);
setContentView(gameView);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
// 将触摸事件和手势处理类绑定到一起
return gestureDetector.onTouchEvent(event);
}
@Override
public void onResume() {
super.onResume();
// 游戏继续或重新开始
// ... ...
Toast.makeText(MainActivity.this, "游戏开始", Toast.LENGTH_SHORT).show();
gameView.gameThread.pauseFlag = false;
}
@Override
protected void onPause() {
super.onPause();
// 游戏暂停
// ... ...
gameView.gameThread.pauseFlag = true;
}
@Override
public void onStop() {
super.onStop();
// 游戏结束
// ... ...
Toast.makeText(MainActivity.this, "游戏结束", Toast.LENGTH_SHORT).show();
gameView.gameThread.pauseFlag = true;
return ;
}
}