Используя OpenGL / GLUT, как я могу определить, удерживаются ли две клавиши одновременно? - PullRequest
11 голосов
/ 15 мая 2009

Используя OpenGL / GLUT, как я могу определить, удерживаются ли две клавиши, скажем, 'a' и 'j' одновременно?

(Эта программа должна быть скомпилирована с OSX GCC, Windows GCC, Windows VS2005, так что никаких зависимых от ОС хаков, пожалуйста.)

Ответы [ 2 ]

19 голосов
/ 15 мая 2009

Попробуйте следующее:

  1. Используйте glutIgnoreKeyRepeat, чтобы получать только физические события нажатия / нажатия клавиш
  2. Используйте glutKeyboardFunc для регистрации обратного вызова для прослушивания событий нажатия клавиш.
  3. Используйте glutKeyboardUpFunc, чтобы зарегистрировать обратный вызов для прослушивания событий keyup.
  4. Создание массива bool keystates[256] для хранения состояния клавиш клавиатуры.
  5. При получении события через обратный вызов с клавиатуры, установите keystates[key] = true.
  6. При получении события через ваш обратный вызов keyup установите keystates[key] = false.
  7. В цикле выполнения проверьте, если (keystates['a'] || keystates['A']) && (keystates['j'] || keystates['J']).

Смотри в этом направлении. Хотя я не проверял это, оно должно работать. Вам также могут понадобиться glutSpecialFunc и glutSpecialUpFunc для получения сообщений для «специальных» ключей.

Кроме того, имейте в виду, что GLUT - действительно старая вещь, и есть много более хороших альтернатив.

0 голосов
/ 04 декабря 2013

под «более хорошей альтернативой», если вы имеете в виду более простую и независимую от ввода функцию ввода, то получили с помощью функции GetAsyncKeyState ...

MSDN - функция GetAsyncKeyState

...