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

GLFW Keyboard Input Registers As Multiple Clicks

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

键盘Class

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

Space

Space

Space

Space

上面:每次点击space应该输出"Space",但是当我点击速度比较快的时候,就得到了上面很多"spaces"的结果。

结论:是否有可能space的点击无论按住多久都只注册一次。谢谢

在您的 handleInput() 函数中,您正在测试 Keyboard.keys[GLFW_KEY_SPACE] 是否为真,如果为真,则执行该语句。问题是,只有当您停止点击 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();
    }
}