如何使用转义键暂停和恢复游戏?

时间:2015-08-04 03:54:52

标签: java multithreading

当按下两次时,如何使我的Escape键暂停并恢复游戏?我试过在我的线程类中调用键适配器类,但它只是暂停游戏;它没有恢复它。

以下是暂停游戏的代码:

//the thread class
class recMove extends Thread {
    JFrame b;

    public boolean running=true;

    //public boolean gameover=false;
    public recMove(JFrame b){
        this.b=b;
        pauseGame();
    }

    public void run(){
        while(running){
            b.repaint();
            try {
               Thread.sleep(100);
            } catch(InterruptedException e){}
        }
   }

   public void pauseGame(){
       addKeyListener(new KeyAdapter(){
           public void keyPressed(KeyEvent e) {
              int keyCode=e.getKeyCode();
              if(keyCode==KeyEvent.VK_ESCAPE) {
                  running=false;
                  System.out.println("escape pressed");
              }
              if(keyCode==KeyEvent.VK_END){
                  System.exit(0);
              }
          }
      });
   }
}

1 个答案:

答案 0 :(得分:0)

它没有恢复,因为线程被杀死,当你按下转义时,running值设置为false因此循环:

while(running){
    b.repaint();
    try {
       Thread.sleep(100);
    } catch(InterruptedException e){}
}

将结束,这反过来会使run()方法退出。当一个run()类扩展Thread(或实现Runnable)的方法退出时,该线程正在被杀死,因此无需再听你的按键了。

您需要更改run()逻辑,以便在running设置为false时不退出,而是等待下一次按键或将侦听器添加到其他位置(在另一个线程中)所以它将再次与游戏创建一个新线程。

此外,您的逻辑esc只会将running更改为false,如果您希望它恢复游戏,则应检查running的状态以及是否false { {1}}您应该将其设置为true