无法捕捉GLFW中的按键事件

时间:2016-08-28 10:40:11

标签: c++ glfw

下面找到的代码片段绘制了一个内部带有相机的立方体。 我不明白为什么当我按下SELECT * FROM entrances e LEFT JOIN entrances e1 ON e.user = e1.user AND e1.action = 'out' WHERE e.action = 'in' AND (e1.user IS NULL OR e.time > e1.time) GROUP BY e.user, e.action 键或右,左,上和下箭头键时,程序无法捕捉到该事件。

escape内部我添加key_callback期望在控制台上看到按下的键的标识符,但每次按任意键时,控制台中都不会打印任何内容。

std::cout << key << std::endl;

1 个答案:

答案 0 :(得分:2)

在寻找像您这样的问题时的第一项业务,以尽量减少表面积并尽可能减少程序,同时保留有问题的行为。您的代码段不构成 最小完整可验证示例(MCVE)。我把它剥离到MCVE:

#include <cstdlib>
#include <iostream>
#include <GLFW/glfw3.h>

static void error_callback(int error, const char* description)
{
    std::cerr << description << std::endl;
}

static void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods)
{
    std::cout << key << std::endl; 
}

int main(int argc, char const *argv[])
{
    GLFWwindow *window;
    glfwSetErrorCallback( error_callback );
    if (!glfwInit())
        return EXIT_FAILURE;

    window = glfwCreateWindow(100, 100, "Project", NULL, NULL);

    if (!window)
    {
        glfwTerminate();
        exit(EXIT_FAILURE);
    }
    glfwMakeContextCurrent(window);
    glfwSwapInterval(1);
    glfwSetKeyCallback(window, key_callback);

    while (!glfwWindowShouldClose(window))
    {
        glfwSwapBuffers(window);
        glfwPollEvents();
    }

    glfwDestroyWindow(window);

    glfwTerminate();
    return EXIT_SUCCESS;
}

鉴于这个最小的例子,我无法重现您的特定问题;即我正在接受关键事件。

这可能意味着两件事:问题存在于代码中的其他地方,它是关于您的特定系统和开发环境的。这就是MCVE如此重要的原因(尤其是 minimal 部分);它是确定真正罪魁祸首的唯一方法。

所以我的建议是:尝试我提出的最小代码,看看它是否仍然没有报告关键事件。如果是这样,那么您的系统就会出现问题,而不是代码问题。否则,您可以逐个重新添加功能层,直到它断开。