过剩 - 按住一个键
glut - holding a key down
我有一些基本代码可以使用 glut 收集按键事件。
如果我按住一个键,我将触发连续事件 (down/up/down/up/down/up/.......),而不是预期的向下(一次,在开始时)和向上(一次, 最后)
#include <GL/glut.h>
#include <iostream>
void keyDown (unsigned char key, int x, int y)
{
std::cout << "keydown " << key << "\n";
}
void keyUp (unsigned char key, int x, int y)
{
std::cout << "keyup " << key << "\n";
}
void render(void)
{
std::cout << "render\n";
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE);
glutInitWindowSize(300, 300);
glutInitWindowPosition(100, 100);
glutCreateWindow("Hello world :D");
glutDisplayFunc(render);
glutKeyboardFunc(keyDown);
glutKeyboardUpFunc(keyUp);
glutMainLoop();
return 0;
}
任何意见表示赞赏。
谢谢
你的问题是自动重复键打开了。要关闭它,只需在初始化阶段输入以下命令:
glutSetKeyRepeat(GLUT_KEY_REPEAT_OFF);
我有一些基本代码可以使用 glut 收集按键事件。
如果我按住一个键,我将触发连续事件 (down/up/down/up/down/up/.......),而不是预期的向下(一次,在开始时)和向上(一次, 最后)
#include <GL/glut.h>
#include <iostream>
void keyDown (unsigned char key, int x, int y)
{
std::cout << "keydown " << key << "\n";
}
void keyUp (unsigned char key, int x, int y)
{
std::cout << "keyup " << key << "\n";
}
void render(void)
{
std::cout << "render\n";
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE);
glutInitWindowSize(300, 300);
glutInitWindowPosition(100, 100);
glutCreateWindow("Hello world :D");
glutDisplayFunc(render);
glutKeyboardFunc(keyDown);
glutKeyboardUpFunc(keyUp);
glutMainLoop();
return 0;
}
任何意见表示赞赏。 谢谢
你的问题是自动重复键打开了。要关闭它,只需在初始化阶段输入以下命令:
glutSetKeyRepeat(GLUT_KEY_REPEAT_OFF);