2016-09-25 15 views
1

私は過去1日半の間この問題を抱えてきました。 私はLWJGLゲームで2次元の書き込み可能なテキストボックスを実装しようとしています。テキストボックスのレンダリングは問題ではなく、完璧に動作します。2Dテキストボックスのキーボード入力

私の入力は本当にうまくいきません。問題は、単一キーの押下を検出する方法がわからないため、入力文字列に "a"を追加するのではなく、 "aaaaaaaaaaaaaaaaaa"と付け加えます。ゲームクロックがかなり速いからです。

これは私のコードです:

private boolean canType = false; 

private static long curTime= System.currentTimeMillis(); 
private static long keyTypeTime = System.currentTimeMillis(); 
String input = ""; 

// Game loop 
// I'm using a timer to limit typing, which doesn't work that well. 

     if (curTime - keyTypeTime >= 100) { 
      keyTypeTime = System.currentTimeMillis(); 
      canType = true; 

     } 

     if (canType) { 
      char c = Keyboard.checkAllKeys(); 
      canType = false; 
      if (c != '*') { 
       if (c == '/') { 
        System.out.println("backspace"); 
        if (input != null && input.length() > 0) { 
         input = input.substring(0, input.length() - 1); 
        } 
       } else if (c == '{') { 
        storyLogic(); 
       } else { 
        input += c; 
       } 
      } 
     } 

これは私の実際のキーボードクラスで、 "checkAllKeys" 方法:

package me.mateo226.main; 

が輸入org.lwjgl.glfw.GLFWKeyCallback。 import static org.lwjgl.glfw.GLFW。*;依然としてLWJGL 3を学習

パブリッククラスKeyboard延びGLFWKeyCallback {

public static boolean[] keys = new boolean[65536]; 

// The GLFWKeyCallback class is an abstract method that 
// can't be instantiated by itself and must instead be extended 
// 
@Override 
public void invoke(long window, int key, int scancode, int action, int mods) { 
    // TODO Auto-generated method stub 
    keys[key] = action != GLFW_RELEASE; 
} 

// boolean method that returns true if a given key 
// is pressed. 
public static boolean isKeyDown(int keycode) { 
    return keys[keycode]; 
} 

public static char checkAllKeys() { 
    char key = '*'; 
    if(isKeyDown(GLFW_KEY_A)) { 
     key = 'a'; 
    } 
    if(isKeyDown(GLFW_KEY_Z)) { 
     key = 'z'; 
    } 
    if(isKeyDown(GLFW_KEY_SPACE)) { 
     key = ' '; 
    } 
    if(isKeyDown(GLFW_KEY_BACKSPACE)) { 
     key = '/'; 
    } 
    if(isKeyDown(GLFW_KEY_ENTER)) { 
     key = '{'; 
    } 


    return key; 

} 

}

イムので、キーボードクラスは、鉱山ではない、唯一checkAllKeys方法は私が行われます。

ありがとうございます!

答えて

0

string key2 = null; 
 
public static char checkAllKeys() { 
 
    char key = '*'; 
 
    if(isKeyDown(GLFW_KEY_A)) { 
 
     key2 = 'a'; 
 
    } 
 
    if(isKeyDown(GLFW_KEY_Z)) { 
 
     key2 = 'z'; 
 
    } 
 
    if(isKeyDown(GLFW_KEY_SPACE)) { 
 
     key2 = ' '; 
 
    } 
 
    if(isKeyDown(GLFW_KEY_BACKSPACE)) { 
 
     key2 = '/'; 
 
    } 
 
    if(isKeyDown(GLFW_KEY_ENTER)) { 
 
     key2 = '{'; 
 
    } 
 

 
    if(!isKeyDown(GLFW_KEY_A)&&key2=='a') { 
 
     key = 'a'; 
 
     key2 = null; 
 
    } 
 
    if(!isKeyDown(GLFW_KEY_Z)&&key2=='z') { 
 
     key = 'z'; 
 
     key2 = null; 
 
    } 
 
    if(!isKeyDown(GLFW_KEY_SPACE)&&key2==' ') { 
 
     key = ' '; 
 
     key2 = null; 
 
    } 
 
    if(!isKeyDown(GLFW_KEY_BACKSPACE)&&key2=='/') { 
 
     key = '/'; 
 
     key2 = null; 
 
    } 
 
    if(!isKeyDown(GLFW_KEY_ENTER)&&key2=='{') { 
 
     key = '{'; 
 
     key2 = null; 
 
    } 
 
}

関連する問題