Используя OpenGL/GLUT, как бы я обнаружил, что одновременно удерживаются две клавиши?
Используя OpenGL/GLUT, как бы я обнаружил, что одновременно удерживаются две клавиши, например "a" и "j"?
(Эта программа должна компилироваться с помощью OSX GCC, Windows GCC, Windows VS2005, поэтому никаких зависимых от ОС хаков пожалуйста.)
Ответ 1
Попробуйте следующее:
Используйте glutIgnoreKeyRepeat, чтобы получать только физические события keydown/keyup
Используйте glutKeyboardFunc, чтобы зарегистрировать обратный вызов, прослушивающий события блокировки.
Используйте glutKeyboardUpFunc для регистрации обратного вызова при прослушивании событий keyup.
Создайте массив bool keystates[256], чтобы сохранить состояние клавиш клавиатуры.
При получении события через обратный вызов keydown установите keystates[key] = true.
При получении события через ваш обратный вызов с помощью клавиатуры установите keystates[key] = false.
В вашем цикле выполнения проверьте, если (keystates['a'] || keystates['A']) && (keystates['j'] || keystates['J']).
Посмотрите в этом направлении. Хотя я не тестировал его, он должен работать. Вам также могут понадобиться glutSpecialFunc и glutSpecialUpFunc для получения сообщений для специальных клавиш.
Кроме того, имейте в виду, что GLUT - это действительно старый материал и что есть намного более приятные альтернативы.
Ответ 2
с помощью "более приятной альтернативы", если вы имеете в виду более простую и независимую от избыточного значения входную функцию, затем получили функцию GetAsyncKeyState...