当前位置: 首页 > 知识库问答 >
问题:

GLFW键盘输入寄存器作为多次点击

司马项明
2023-03-14

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

键盘类

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版本29

空间

空间

空间

空间

上面的:“Space”应该在我每次点击Space时输出,但是当我点击它的速度相对较快时,我会得到上面很多“Space”的结果。

结论:无论您按住空格键多长时间,空格键是否可能只注册一次。谢谢

共有1个答案

苍嘉澍
2023-03-14

handleInput()函数中,您正在测试键盘。keys[GLFW\u KEY\u SPACE]为true,如果为true,则执行该语句。问题是,只有当您停止点击空格时,此测试才会出错,这可能需要几秒钟的时间。

我的建议是:一旦您测试了Keyboard.keys[GLFW_KEY_SPACE],请将其设为false。

public static void handleInput() {
    if (Keyboard.keys[GLFW_KEY_SPACE]) {
        Keyboard.keys[GLFW_KEY_SPACE] = false;
        System.out.println("Space");
        glfwPollEvents();
    }
}
 类似资料:
  • 我正在编写一个LWJGL应用程序,我在让键盘和鼠标类工作方面遇到了一些困难。永远不会调用MouseWheelMove、keyPressed和KeyRelease方法。我可以确认调用了Listener.Update方法。 在这个应用程序中,我将显示嵌入到一个JFrame中,但是即使我不这样做,它仍然不能工作,所以这似乎不是问题所在。 控制台输出: 呈现器初始化: 侦听器类:

  • Vim 可以将不同字段剪切或复制到不同寄存器中,您可以从不同寄存器中取出内容后粘贴 "寄存器名称 按下"键和另一个字符键,便可以定义一个寄存器。例如:"a "1 定义寄存器后直接进行操作 "ayy 将当前行复制到寄存器 a 中 "ap 将寄存器 a 中的内容粘贴到光标之后 :registers 查看所有寄存器的内容 通常情况下,寄存器 + (先按",再按 Shift+= )对应

  • 将 SDK 工具 rev 更新到 20 后,Android 模拟器不会从我的桌面键盘获取键盘输入。当按下桌面键盘的某个键时,模拟器将死机,我必须终止其进程。 Android模拟器也没有从模拟器自己的键盘中获取键盘输入。但是我已经按照Android模拟器不采用键盘输入的步骤解决了这个问题 - SDK工具修订版20。 有人有什么建议吗?

  • 8.3.1 键盘输入的中断功能 键盘输入是绝大多数程序的主要输入方式,学习和掌握有关键盘输入中断的使用方法对编写交互式程序是非常重要的,也能更进一步理解计算机是如何接受键盘输入的。 1、键盘缓冲区 键盘缓冲区是一个先进先出的环形队列,其所占内存区域如下: KBHead DW ? ;其内存地址为0000:041AH,缓冲区头指针 KBTail DW ? ;其内存地址为0000:041CH,缓冲区尾指

  • 我在这方面工作了4个多小时,无法通过。我试图做的是在输入焦点区域外敲击时隐藏键盘。不知何故,键盘无法隐藏。 我尝试了StackOverflow上所有可能的答案,但无法找到解决方案。 如果有人指导我解决这个问题,那就太好了。