2012-07-30 4 views
0

Je cherche une solution pour recevoir du texte via LWJGL. Je ne parle pas du type d'entrée d'événement de clavier standard offert par LWJGL, je cherche la possibilité de recevoir des lignes de texte réelles, un peu comme les TextFields offerts par AWT/Swing. Je le fais principalement dans l'intérêt de l'apprentissage, et en tant que tel, je n'ai aucun intérêt à utiliser une bibliothèque en dehors de LWJGL (comme TWL).Saisie de texte avec LWJGL

Actuellement, j'ai quelque chose comme ceci:

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

Cependant, il ne parvient pas à gérer correctement changement, ni aucune des autres commandes spéciales décrites ci-dessus. Alors, quelle est la meilleure chose à faire?

Répondre

2

Jetez un oeil à this file du code source de NiftyGUI, qui devrait contenir ce code de gestion de texte.

+2

Merci beaucoup, il y a certainement une solution relativement simple à cela. C'est [ici] (https://github.com/void256/nifty-gui/blob/1.3/nifty-renderer-lwjgl/src/main/java/de/lessvoid/nifty/renderer/lwjgl/input/LwjglKeyboardInputEventCreator.java) pour quiconque regarde. –

+0

Content de pouvoir aider! – Oskar

0

Il suffit de supprimer votre ligne de traitement de changement et d'ajouter:

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

avant le début de la boucle while.