2014-03-30 42 views
1

我做的,使用這種方法控制所有爲我的遊戲LWJGL鍵的一類:如何使一類的運行不斷

 if (Keyboard.isKeyDown(Keyboard.KEY_A)) { 

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

除了在更大的規模。我的問題是,當這個類被稱爲它只能運行一次,所以唯一的方法來看到代碼的效果是當遊戲啓動時有一個拇指痙攣在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

這段代碼可以幫助您瞭解如何使用定時器來安排重複性任務:

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

您可以包含此代碼到你的類:

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

} 

你應該考慮停止定時器線程完成收聽您的鍵盤輸入。如果您的應用程序必須在其執行過程中輪詢鍵盤狀態,則另一種選擇是將您的計時器標記爲daemon,這樣它就不會阻止應用程序完成。

+0

是的,我已經涉足KeyListeners,但我最近也看了關於定時器所以你能在這些 – SemperAmbroscus

+0

闡述@FeatheredOrcian我已經給你們寫一個小例子。我希望它能幫助你。 –

+0

謝謝,我要導入哪個計時器5 – 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