我自己写了个GameView,然后在Avtivity里面setContentView(gameView),在GameView那边的run方法中将游戏结束信息传递给Activity,然后Activity用setContentView(R.···)换布局,我试过了,可以把消息传过来,但是执行setContentView(R.···)会报空引用的错误,现在就是要当GameView那边游戏结束时候通知Avtivity更换布局,通知传递过来了,但是处理就出错了,请大牛们帮忙看下,Activity里面的代码如下
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
gameView=new GameView(this);
setContentView(gameView);
gameOver.post(gameView.MyThread);
}
public Handler gameOver = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 1:
System.out.println("gameover```````````````````");//这句话可以打印
setContentView(R.layout.choose_layout);//就是这里出错了
break;
default:
break;
}
}
};
GameView代码如下:Runnable MyThread =new Runnable (){
public void run() {
while (flag) {
canvas = holder.lockCanvas();
·
·
·
·
holder.unlockCanvasAndPost(canvas);
//GameOver处理
if (endGame()){
Message msg = gameViewActivity.gameOver.obtainMessage();
msg.arg1 = GAME_OVER;//GAME_OVER=1
gameViewActivity.gameOver.sendMessage(msg);
}
}
}
};
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
gameView=new GameView(this);
setContentView(gameView);
gameOver.post(gameView.MyThread);
}
public Handler gameOver = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 1:
System.out.println("gameover```````````````````");//这句话可以打印
setContentView(R.layout.choose_layout);//就是这里出错了
break;
default:
break;
}
}
};
GameView代码如下:Runnable MyThread =new Runnable (){
public void run() {
while (flag) {
canvas = holder.lockCanvas();
·
·
·
·
holder.unlockCanvasAndPost(canvas);
//GameOver处理
if (endGame()){
Message msg = gameViewActivity.gameOver.obtainMessage();
msg.arg1 = GAME_OVER;//GAME_OVER=1
gameViewActivity.gameOver.sendMessage(msg);
}
}
}
};
这个没问题的,我在其他Activity里面用了的···就是没问题才用这个在测试···
试过了,还是一样,我想是我对Handler理解有点问题,其它线程向主线程发送消息主线程作处理这块有点混了···
如果是复杂写的游戏的话,用SurfaceView类进行开发更好