the gameloop
while(currentPlayer.haveIWon() == false){
//wait for input
while(!inputIsDone){
System.out.println("waiting for move");
System.out.println(squareSelector.isDone() + " " + rooSelector.isDone()) ;
checkInput() ;
if(squareSelector.isDone() && rooSelector.isDone()){
inputIsDone = true ;
}
}
//update board
currentPlayer.performMove(k, s);
rooSelector.setDone(false);
squareSelector.setDone(false);
inputIsDone = false ;
//currentPlayer.setInput(false);
//repaint
Main.getState().getComponent().repaint();
}
//display winnner thing
checkInput方法
public void checkInput(){
if(rooSelector.getSelected() != null){
k = rooSelector.getSelected() ;
}
if(squareSelector.getSelected() != null){
s = squareSelector.getSelected() ;
}
}
如果您需要更多代码来了解正在发生的事情让我知道,我会添加更多。
答案 0 :(得分:0)
Swing是单线程的。由于其设计,与GUI相关的所有内容都必须在Swing线程上完成,也称为事件派发线程。它基本上做了一件事:查看事件队列,如果有东西,它会处理它,如果没有,就会进入休眠状态。每次鼠标移动,按键,重新绘制等都是事件队列中的事件。
如果您的游戏仅对GUI事件做出反应并且没有冗长的操作,则您不必使用任何特殊的操作。您可以在没有while
的情况下编写逻辑,这样它就不会阻塞,只会对事件做出反应。但是,这种可能性完全取决于您要实施的目标。
如果您有任何长时间阻塞线程的操作,您将需要使用单独的线程。这样,其他线程不会影响您的GUI,但是您需要非常小心地将数据从一个线程发送到另一个线程或者在另一个线程上调用某些东西。