У меня есть некоторый базовый код для сбора событий нажатия клавиш вверх и вниз с помощью перенасыщения.
Если я удерживаю клавишу нажатой, я получаю непрерывные события (вниз / вверх / вниз / вверх / вниз / вверх / ……..) вместо намеченного вниз (один раз, в начале) и вверх ( один раз, в конце)
#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);
Справочная страница по адресу: https://linux.die.net/man/3/glutsetkeyrepeat
Других решений пока нет …