Java 二维文本框的键盘输入

Java 二维文本框的键盘输入,java,input,textbox,lwjgl,Java,Input,Textbox,Lwjgl,所以在过去的一天半里,我一直被这个问题困扰着。 我试图在我的LWJGL游戏中实现一个2D可写文本框。文本框的呈现不是问题,而且工作完美无瑕 然而,我的输入并没有真正起作用。问题是我不知道如何检测单次按键,所以它没有在输入字符串中添加“a”,而是添加了“aaaaaaaaaaaaaaaaaa”,因为游戏时钟非常快 这是我的代码: private boolean canType = false; private static long curTime= System.currentTimeMilli

所以在过去的一天半里,我一直被这个问题困扰着。 我试图在我的LWJGL游戏中实现一个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”方法:

导入org.lwjgl.glfw.GLFWKeyCallback; 导入静态org.lwjgl.glfw.glfw.*

公共类键盘扩展了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;

}
}

我还在学习LWJGL 3,所以键盘课不是我的,只有checkAllKeys方法是我自己做的

谢谢

string key2=null;
公共静态字符checkAllKeys(){
字符键='*';
如果(isKeyDown(GLFW_KEY_A)){
键2='a';
}
if(isKeyDown(GLFW_KEY_Z)){
键2='z';
}
if(isKeyDown(GLFW_KEY_SPACE)){
键2=“”;
}
if(isKeyDown(GLFW_KEY_BACKSPACE)){
键2='/';
}
如果(isKeyDown(GLFW_KEY_ENTER)){
键2='{';
}
如果(!isKeyDown(GLFW_KEY_A)和&key2=='A'){
键='a';
key2=null;
}
如果(!isKeyDown(GLFW_KEY_Z)&&key2=='Z'){
键='z';
key2=null;
}
如果(!isKeyDown(GLFW_KEY_SPACE)&&key2=''){
键='';
key2=null;
}
如果(!isKeyDown(GLFW_KEY_BACKSPACE)&&key2=='/')){
键='/';
key2=null;
}
如果(!isKeyDown(GLFW_KEY_ENTER)&&key2=='{'){
键='{';
key2=null;
}
}
string key2=null;
公共静态字符checkAllKeys(){
字符键='*';
如果(isKeyDown(GLFW_KEY_A)){
键2='a';
}
if(isKeyDown(GLFW_KEY_Z)){
键2='z';
}
if(isKeyDown(GLFW_KEY_SPACE)){
键2=“”;
}
if(isKeyDown(GLFW_KEY_BACKSPACE)){
键2='/';
}
如果(isKeyDown(GLFW_KEY_ENTER)){
键2='{';
}
如果(!isKeyDown(GLFW_KEY_A)和&key2=='A'){
键='a';
key2=null;
}
如果(!isKeyDown(GLFW_KEY_Z)&&key2=='Z'){
键='z';
key2=null;
}
如果(!isKeyDown(GLFW_KEY_SPACE)&&key2=''){
键='';
key2=null;
}
如果(!isKeyDown(GLFW_KEY_BACKSPACE)&&key2=='/')){
键='/';
key2=null;
}
如果(!isKeyDown(GLFW_KEY_ENTER)&&key2=='{'){
键='{';
key2=null;
}
}
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;

}