2015-08-04 3 views
0

Как сделать мой ключ 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); 
       } 
      } 
     }); 
    } 
} 
+0

Начните с использования 'AtomicBoolean' вместо простого' boolean'. Вы также должны иметь блокировку внутренней паузы, которая заставит основной цикл ждать в нем до тех пор, пока вы не возобновите игру, если вы не намерены ее остановить. Возможно, что-то вроде [этого, например] (http://stackoverflow.com/questions/31715950/control-of-running-thread-using-multiple-threading-concept-of-java/31716210#31716210) – MadProgrammer

+0

спасибо большое, дон Я много знаю об этом, но я обязательно посмотрю на это. – BlueWizAngel

ответ

0

Это не возобновляется, так как поток убит, когда вы нажмете бежать значение running устанавливается в false поэтому этот цикл:

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

Закончится, что в свою очередь сделает выход run(). Когда метод run() класса, простирающегося на Thread (или реализующий Runnable), завершает эту нить, поэтому больше нет прослушивания ваших нажатий клавиш.

Вы должны изменить свою run() логику, так что не выходит, когда running установлен в false, но вместо того, чтобы ждать следующего нажатия клавиши или добавить слушателя где-то еще (в другом потоке), поэтому он будет создавать новый поток с игра снова.

Кроме того, в вашей логике esc изменяет только running ложь, если вы хотите, чтобы затем возобновить игру, вы должны проверить состояние running и если это false вы должны установить его в true вместо этого.

+0

Да, я вижу, это настоящий открыватель для глаз ........ Большое спасибо. – BlueWizAngel

+0

Прошу вас также помочь мне с этим ............ http: //stackoverflow.com/ вопросы/31776720/How-To-Make-все-мои-Пуля-Удаление пересекался-объекты – BlueWizAngel

Смежные вопросы