我正在做一个学校项目,我们正在制作一个bomberman游戏。操场上有两个炸弹人,用户和人工智能。
当用户放置炸弹并离开它时,炸弹会在时间结束时闪烁和爆炸。
然而,这并不适用于人工智能。
当人工智能放置炸弹并离开它时,当它应该闪现然后爆炸时,应用程序崩溃,留下了这个错误:
FATAL EXCEPTION: Timer-0
java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
CountDownTimer
代码如下所示。
public void explodeAIBomb(){
//Starts countdown 2-4 seconds
new CountDownTimer(new Random().nextInt(2000) + 2000, 300) {
//test for onTick; bomb flashes
boolean test = false;
public void onFinish() {
//on explosion{
gameBoard[locateAIX][locateAIY] = new Blast();
explosionSide(locateAIX, locateAIY);
explosionVert(locateAIX, locateAIY);
updateView();
//Clear all blasts after 1 second
new CountDownTimer(1000, 1000){
public void onFinish(){
for (int x = 0; x < XasLength + 1; x++) {
for (int y = 0; y < YasLength + 1; y++) {
if(gameBoard[x][y] != null){
if(gameBoard[x][y].getTileId() == BLAST || gameBoard[x][y].getTileId() == BLAST_SIDE || gameBoard[x][y].getTileId() == BLAST_VERT){
gameBoard[x][y] = null;
}
}
}
}
aiBombPlanted = false;
updateView();
}
@Override
public void onTick(long millisUntilFinished) {
}
}.start();
updateView();
}
//Flashes the bomb every 0.3 second
public void onTick(long millisUntilFinished) {
if(test){
loadTile(BOMB, r.getDrawable(R.drawable.bomb));
test = false;
}
else{
loadTile(BOMB, r.getDrawable(R.drawable.bomb2));
test = true;
}
updateView();
}
}.start();
}
发布于 2013-03-30 21:25:00
在某个地方,您正在从工作线程执行UI工作。您需要从主线程中调用处理UI的内容。
我想同样的问题以前已经回答过了。
stackoverflow.com/questions/6354740/how-is-countdowntimer-accessing-ui-inside-ontick-method
https://stackoverflow.com/questions/15718989
复制相似问题