GLFW键盘输入注册为多次点击

时间:2017-08-15 14:00:16

标签: opengl window lwjgl glfw

在我当前的LWJGL应用程序中,我正在使用GLFW窗口输入处理程序,我已经设置了一个类来处理名为Keyboard.java的类,它扩展了GLFWKeyCallback。我已经正确设置了我的键盘输入类,但是当我单击一个键时,如果我没有点击足够快(非常快),那么它会注册为多次点击。我在下面提供了一些文档:

键盘类

public class Keyboard extends GLFWKeyCallback {

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

    @Override
    public void invoke(long window, int key, int scancode, int action, int mods) {

        keys[key] = action == GLFW_PRESS;

    }

}

实施

public static void handleInput() {
    if (Keyboard.keys[GLFW_KEY_SPACE]) {
        System.out.println("Space");
        glfwPollEvents();
    }
}

上述方法在主游戏循环中实现,并且每帧调用一次。

结果

初始化LWJGL版本:3.1.2 build 29

空间

空间

空间

空间

上述:每次点击空格时都应输出“空格”,但是当我点击它相对较快时,我会得到许多“空格”的上述结果。

结论:无论您持有多长时间,只需点击一次空格即可。感谢

1 个答案:

答案 0 :(得分:1)

handleInput()函数中,您正在测试Keyboard.keys[GLFW_KEY_SPACE]是否为真,如果是,则执行该语句。问题是当你停止击中空间时,这个测试只会变成错误,这可能需要几秒钟。

我的建议:一旦你测试了Keyboard.keys[GLFW_KEY_SPACE],就把它弄错了。

public static void handleInput() {
    if (Keyboard.keys[GLFW_KEY_SPACE]) {
        Keyboard.keys[GLFW_KEY_SPACE] = false;
        System.out.println("Space");
        glfwPollEvents();
    }
}