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

在按键期间,不会不断调用GLFW中的glfwSetKeyCallback()

龙高超
2023-03-14

当我按下一个键时,我试图让我的游戏做些什么。我正在使用GLFW为我处理Windows API。当我在标题中使用提及回调函数时,我陷入了困境和困惑。

参考文件:https://www.glfw.org/docs/latest/input_guide.html#input_keyboard

我遵循了“键输入”资源(不是“文本输入”),但我得到了一种文本输入回调曲线,比如,当我一直按下一个键时,我得到了按下键事件,然后它停止一段时间,然后我得到了重复的事件。回调不应该在时间上保持不变吗(没有时间间隔)?这是我的代码:

void onKeyPress(GLFWwindow* window, int key, int scancode, int action, int mods)
{
    if (key == GLFW_KEY_W && action != GLFW_RELEASE)
    {
        camera.pos += glm::vec3(0.0f, 0.0f, 1.0f);
        updateCameraMatrices();
    }
}

// ...

glfwSetKeyCallback(window, onKeyPress);

共有2个答案

杨星纬
2023-03-14

没有必要使用事件回调,如果你只是想知道阉羊键是否按下。只需使用glfwGetKey(窗口,键)来获取当前的键状态(这将返回GLFW_PRESSGLFW_RELEASE)。更多详情请见此处。

柳珂
2023-03-14

非挥发性物质。看来我的期望是错误的。我应该只听GLFW_按下和GLFW_释放,存储键状态,并在我的主循环中使用if(状态)。

 类似资料:
  • 一般来说,我对GLFW和OpenGL比较陌生,我正在开发一个小型模型渲染器。我目前正在处理输入,我面临着GLFW如何处理输入的问题,让我解释一下:每个教程都告诉我使用glfwGetKey和“if-forest”来查看是否按下了这样或那样的键。我遇到的问题是,如果我映射了很多关键点,它可能会变得很慢,而且很难看。所以我使用函数指针表和glfwSetKeyCallback来加速这一过程并获得更清晰的代

  • 我正在尝试编写一个函数,该函数将取一个整数,将其除以数字,将其相加,如果总和为 我并不是真的在寻找一个最佳的解决方案,我只是想知道为什么这不起作用。

  • 我创建了一个ExecutorService来管理所有单独的线程,每个线程都处理一个套接字连接。我在每个线程中重写了中断方法,以便在线程中断时关闭套接字,以防套接字当前处于不可中断的方法(如socketserver.accept())。 如果我在应用程序关闭时手动调用线程上的中断,一切都会正常关闭。但是,如果我使用我的ExecutorService并运行Shutdown Now,它似乎根本没有调用重

  • 问题内容: 我正在学习如何在Android中使用线程,并且为此,我制作了一个播放一系列笔记的小型应用程序。这个想法是,有一个开始按钮和一个结束按钮,(显然)如果您按下开始按钮,它将开始播放音乐,而如果您按下结束按钮,它将停止播放。开始按钮可以正常工作,但是问题是结束按钮不能正常工作。我在找出原因时遇到了麻烦,因此也许有些人可以帮助我。这是代码: 问题答案: 您正在调用正在播放的线程,但此时可能正在

  • 我在Netbeans上运行Glassfish,但是调试器不能在断点处停止。 我用“调试模式”启动Glassfish,将调试器附加到9009端口,就像我在日志文件中看到的那样。我在托管bean代码中的一行上设置了一个断点,右键单击项目并选择“debug”。 但是调试器从未停止,我找不到任何错误。即使我在其他行上设置断点,也不起作用。我还需要其他配置吗? 这里是我的环境。 JDK 1.8.0_60 N

  • 编辑: 主要问题:为什么只有一个线程抛出interruptedexception,而两个线程都阻塞在条件上。await 所以下面的代码只是我创建的一个示例。主要的问题是开发一个生产者-消费者实现,在这个实现中,我必须创建一个模拟类,它产生两种线程:客户线程和厨师线程,这两种线程是基于可重入锁进行同步的。在执行一些操作(客户添加订单,厨师执行服务这些订单)后,我调用客户线程上的join以确保所有订单