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

使用lwjgl-glfwgetkey一次的GLFW

酆鸿哲
2023-03-14

问题是:如果在0帧中我按箭头键,计数变量被添加,但在下一帧中该键仍然被按下,所以它被再次添加。我不知道如何解决这个问题,我试图将GLFW_PRESS更改为GLFW_RELEASE,但我希望操作发生在按下键时。

if ((glfwGetKey(window, GLFW_KEY_UP) == GLFW_REPEAT) && select > 0) {
    button[select].toggleSelect();
    select--;
    button[select].toggleSelect();
}

if ((glfwGetKey(window, GLFW_KEY_DOWN) == GLFW_REPEAT) && select < button.length) {
    button[select].toggleSelect();
    select++;
    button[select].toggleSelect();
}

我知道这段代码会引发数组索引越界异常

共有1个答案

滑文昌
2023-03-14

您应该注册一个密钥回调:

private GLFWKeyCallback keyCallback;

// ...

keyCallback = new GLFWKeyCallback() {
    @Override
    public void invoke(long window, int key, int scancode, int action, int mods) {
        if (action == GLFW_PRESS) {
            if (key == GLFW_KEY_UP && /*...*/) {
                // ...
            }
            if (key == GLFW_KEY_DOWN && /*...*/) {
                // ...
            }
        }
    }
}
glfwSetKeyCallback(window, keyCallback);

每次生成键事件时都会调用invoke()方法。action参数可以接受三个值:

  • glfw_press刚按下键时
  • glfw_repeat之后,当键仍在按下时
  • glfw_release当密钥wast刚刚发布时
 类似资料:
  • 恭喜你,你的维基现在启动和运行。这里有一些更多的提示,让你开始。 与DokuWiki的享受你的工作, – 开发商 创建您的第页 您的wiki需要有一个起始页。只要它不存在,这个环节将是红色的主页。 来吧,跟随该链接,创建页面。如果你需要用你总是可以参考的语法页面的语法帮助。 您可能还需要使用一个侧边栏。要创建它,只需编辑边栏页。在该页面一切都将在一个侧面的利润率列中显示。请阅读我们的侧边栏上的常见

  • 每次我尝试运行我的 LWJGL 应用程序时,JVM 都会崩溃。这似乎与向我的 VBO 添加多个三角形有关。 这是我的初始化代码 这是我的渲染代码 当我删除顶点数组中的最后9个值时,它工作得很好,但是如果我保留这些值,或者添加更多的值,JVM就会崩溃。

  • 我想画一个球体并对它进行纹理,我用三角形来画它,当我试图对它进行纹理时,有些三角形没有被覆盖 我用这个函数来生成坐标

  • 所以最基本的,我想做的是使用LWJGL让我的球员在比赛中移动。玩家当前正在移动,但当你按住按钮时,他没有继续移动。 更新的代码: 我的代码仍然有同样的问题,我开始认为是Keyboard.next()阻止了我按住按钮,而播放器仍然在移动。

  • 问题内容: 我有这个,在设定的总数时我得到一个错误。为什么我不能多次访问CTE? 问题答案: A基本上是一次性视图。它只保留一个语句,然后自动消失。 您的选择包括: 重新定义第二次。从定义的末尾到您的之前,这就像复制粘贴一样简单。 将结果放入表格或变量中 将结果具体化为真实表并引用 稍微更改一下即可,只需从您的CTE: 。

  • LWJGL(Lightweight Java Game Library)它可以帮助Java程序员开发有着商业性质的游戏.LWJGL为开发者提供简单易用的API来访问OpenGL (Open Graphics Library)与OpenAL (Open Audio Library) 同也提供操作控制器(Gamepads, Steering wheel和操纵杆)的API. 示例代码: import o