我正在尝试为游戏添加暂停功能。不幸的是,我正在使用的方法导致程序不再需要输入,所以我无法恢复游戏。
以下是我目前正在做的事情:
暂停按钮调用:
public void pause(){
if(data.paused == true){
data.paused = false;
}
else{
data.paused=true;
while(true){
if(data.paused == true){
try{
Thread.currentThread().sleep(100);
}
catch(InterruptedException ie){
System.out.println(ie);
}
}
else
break;
}
data.paused=false;
}
return;
然后我有一个我必须处理的TimerTask:
class aTask extends java.util.TimerTask {
protected Data data;
public aTask( Data d ) { data = d; }
public void run() {
try{
if(data.paused){
try{
Thread.currentThread().sleep(100);
}
catch(InterruptedException ie){
System.out.println(ie);
}
}
else
data.tick();
}
catch( ATCGameOverException e ){
data.gameOver( e.getMessage() );
}
}
};
其中tick会每秒在游戏中引发一次动作。
我认为这会让按钮按下时暂停游戏,然后再次按下按钮时取消暂停,但我会错的。我做错了什么?
答案 0 :(得分:5)
试试这个:
public void pause(){
data.paused = !data.paused;
}
它看起来像是一个线程问题。如果你使用Swing并且你的pause方法与一个动作监听器相关联,那么行为是正常的:暂停函数永远不会返回,Swing主线程再也没有控制权,并且无法管理进一步的动作,包括取消暂停......看看{{ 3}}
我的解决方案只是简单地反转暂停变量的状态,并将控制权交还给Swing。这是游戏主循环,它将根据此变量的状态来勾选数据。没有线程被阻塞,主循环继续循环。