下面找到的代码片段绘制了一个内部带有相机的立方体。
我不明白为什么当我按下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;
答案 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 部分);它是确定真正罪魁祸首的唯一方法。
所以我的建议是:尝试我提出的最小代码,看看它是否仍然没有报告关键事件。如果是这样,那么您的系统就会出现问题,而不是代码问题。否则,您可以逐个重新添加功能层,直到它断开。