2011-12-03 7 views
0

게임에 일시 중지 기능을 추가하려고합니다. 불행히도 내가 현재 사용하고있는 방법은 프로그램이 더 이상 입력을받지 못하게하므로 게임을 다시 시작할 수 없습니다.자바 응용 프로그램에서 게임 일시 중지

일시 정지 버튼 전화 :

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()); 
     } 
    } 
}; 

틱 :

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를가 여기에

내가 현재 뭘하는지입니다 매초마다 게임에서 행동을 일으킨다.

이 버튼을 누르면 게임이 일시 중지되고 버튼을 다시 누르면 일시 중지 될 수 있다고 생각하지만 잘못된 것입니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

+0

'aTask'는 게임 로직을 포함하고 있지 않은 경우 무엇입니까? 게임 논리 루프는 어디에 있습니까? – havexz

+0

이 (가) 0 선수 게임입니다. http://www.technicalypto.com/2011/08/conways-game-of-life-in-java.html은 일시 중지가 필요한 0 플레이어 게임의 예입니다. 1 명의 플레이어 인 경우 더 많은 코드를 보여주십시오. – bragboy

+0

왜 잠자기를 시도하고 잠시 멈춤 상태를 점검 할 수 있을까요? 나는 당신이 여전히 화면을 렌더링하거나 충돌의 경우 어떤 종류의 상태를 저장해야 할 수도 있습니다 같아요? –

답변

5

간단하게이 시도 :

public void pause(){ 
    data.paused = !data.paused; 
} 

그것은 스레딩 문제처럼 보인다. 스윙을 사용하고 일시 중지 메소드가 동작 리스너에 묶여있는 경우, 일시 중지 기능이 반환되지 않고 스윙 주 스레드가 다시 제어 할 수 없으며 일시 중지 해제를 포함하여 추가 작업을 관리 할 수 ​​없습니다 ... this link

내 솔루션은 일시 중지 변수의 상태를 단순히 반전하고 Swing으로 제어를 되돌립니다. 이 변수의 상태에 따라 데이터를 체크하거나 틱하지 않는 것은 게임 메인 루프입니다. 스레드가 차단되지 않았 으면 주 루프가 계속 반복됩니다.

+0

우리가 원래 포스터에서 아직 듣지 못했지만 이건 옳았는지 말하기 어렵지만, 나에게 좋은 소리. 1 + –

+0

"Hovercraft Full of Eels": D : D : D – solendil

+0

덕분에,이 작품은 죄송합니다. 나는이 질문에 더 민감하지 않았지만,이 해결책은 효과가있는 것 같습니다. 나는 다른 사람을 도울 것입니다 더 자세한 내용을 넣을 수 있습니다. –

관련 문제