2014-03-30 2 views
1

나는 그런 방법을 사용하여 LWJGL에서 내 게임에 대한 모든 키를 제어하는 ​​클래스를했다. 내 문제는이 클래스가 호출 될 때만 실행되므로 코드의 효과를 확인하는 유일한 방법은 게임이 시작될 때 A 버튼에 엄지를 경련시키는 것입니다.는 지속적으로

내 코드 :

public class KeyBindings { 

    public static void run() { 

     try { 

      Keyboard.create(); 

     } catch (LWJGLException e) { 

      e.printStackTrace(); 
     } 

     if (Keyboard.isKeyDown(Keyboard.KEY_F1)) { 

      System.out.println("............................."); 
     } 
    } 

그리고 나서 다른 클래스의 KeyBindings.run();을 호출합니다.

답변

2

당신은 옵션이 있습니다

  • 설문 조사 키 상태.
  • 비동기 키 이벤트에 반응합니다.

가 최고 두 번째 옵션을 구현하는 반면 당신이 타이머 작업을 예약해야 할 첫 번째 옵션을 구현하려면 key-listeners를 사용할 수 있습니다.

public class KeyBindings { 

    private Timer t; 

    KeyBindings() { 
     t = new Timer(); 
     long period = 5*60*1000; //For example 0.5 seconds 
     long delay = period; 
     t.schedule(new TimerTask() { 
       @Override 
       public void run() { 
        run(); 
       } 
      }, delay, period); 
    } 

    public static void run() { 

     try { 

      Keyboard.create(); 

     } catch (LWJGLException e) { 

      e.printStackTrace(); 
     } 

     if (Keyboard.isKeyDown(Keyboard.KEY_F1)) { 

      System.out.println("............................."); 
     } 
    } 

} 

당신은 중지 고려해야한다 : 당신은 당신의 클래스에이 코드를 포함 할 수 있습니다

Timer t = new Timer(); 
long period = 5*60*1000; //For example 5 minutes 
long delay = 1*60*1000; //For example 1 minute 
t.schedule(new TimerTask() { 
      @Override 
      public void run() { 
       //To do: Your code to be repeated each period ms 
      } 
     }, delay, period); 

:

이 코드 조각은 타이머를 사용하여 반복적 인 작업을 예약하는 방법을 이해하는 데 도움이 될 수 있습니다 키보드 입력을 청취 할 때 타이머 스레드. 또 다른 옵션은, 응용 프로그램이 키보드 상태를 폴링 (polling)해야하는 경우 타이머를 daemon으로 표시하여 응용 프로그램이 종료되지 않도록하는 것입니다.

+0

예 내가 KeyListeners에서 다뤄했지만 나는 또한 최근에 내가 당신을 위해 작은 예를 썼다 @FeatheredOrcian 그래서 당신은 그 – SemperAmbroscus

+0

에 정교한 수있는 타이머에 대해 읽어보십시오. 나는 그것이 당신을 돕기를 바랍니다. –

+0

감사합니다. 어떤 타이머를 가져 왔습니까? – SemperAmbroscus

0

루프에서 키 인식 논리를 반복합니다.

public class KeyBindings { 
    private volatile boolean shoutDown; 

    public void setShoutDown(boolean shoutDown) { 
     this.shoutDown = shoutDown; 
    } 

    public static void run() { 

     try { 

      Keyboard.create(); 

     } catch (LWJGLException e) { 

      e.printStackTrace(); 
     } 

     while (!shutDown) { 
      if (Keyboard.isKeyDown(Keyboard.KEY_F1)) { 
       System.out.println("............................."); 
      } 
     } 
    } 

}

+0

나는 이것과 비슷한 것을 시도해 보았고 그것이 계속 출력되는 지점까지 작업했다. ............ – SemperAmbroscus