2012-07-30 61 views
0

我正在尋找通過LWJGL接收文本輸入的解決方案。我並不是指由LWJGL提供的標準鍵盤事件輸入,我正在尋找接收實際文本輸入行的功能,就像AWT/Swing提供的TextField一樣。我這樣做主要是爲了學習的興趣,因此,我沒有興趣使用LWJGL之外的庫(如TWL)。使用LWJGL輸入文本

目前,我有這樣的事情:

private boolean shift = false; 
    private void chatControls(float ticksPassed) { 
     while (Keyboard.next()) { 
      if (Keyboard.isKeyDown(Keyboard.KEY_RETURN)) { 
       this.ui.toggleChat(); 
      } else if (Keyboard.isKeyDown(Keyboard.KEY_DELETE)) { 
       this.chatText = ""; 
      } else if (Keyboard.isKeyDown(Keyboard.KEY_BACK) && Keyboard.getEventKeyState()) { 
       try { 
        this.chatText = this.chatText.substring(0, chatText.length() - 1); 
       } catch (StringIndexOutOfBoundsException e) {} 
      } else if (Keyboard.isKeyDown(Keyboard.KEY_LSHIFT) || Keyboard.isKeyDown(Keyboard.KEY_RSHIFT)) { 
       shift = Keyboard.getEventKeyState(); 
      } else if (Keyboard.getEventKeyState() && !jtLetter) { 
       if (shift) { 
        this.chatText += Character.toUpperCase(Keyboard.getEventCharacter()); 
       } else { 
        this.chatText += String.valueOf(Keyboard.getEventCharacter()); 
        jtLetter = true; 
       } 
      } else { 
       jtLetter = false; 
      } 
      this.ui.updateChat(chatText); 
     } 
    } 

但是,它不管理,妥善處理移位,也沒有上述的任何其它特殊命令。那麼,最好的做法是什麼?

回答

2

看一下NiftyGUI的源代碼this file,它應該包含這個文本處理代碼。 While循環開始之前

if(Keyboard.isKeyDown(Keyboard.KEY_LSHIFT) && !Keyboard.isKeyDown(Keyboard.KEY_RSHIFT)) 
     shift=true; 

+2

非常感謝,它確實有一個相對簡單的解決方案。這是[這裏](https://github.com/void256/nifty-gui/blob/1.3/nifty-renderer-lwjgl/src/main/java/de/lessvoid/nifty/renderer/lwjgl/input/LwjglKeyboardInputEventCreator.java )爲其他人尋找。 – 2012-08-05 21:18:04

+0

很高興能幫到你! – Oskar 2012-08-06 08:11:50

0

只要刪除你的換檔操作線和補充。