Usando OpenGL /GLUT ¿cómo puedo detectar si dos teclas se mantienen presionadas al mismo tiempo?
Pregunta
Usando OpenGL /GLUT ¿cómo puedo detectar si dos claves, decir 'a' y 'j' se mantienen en el mismo tiempo?
(Este programa necesita para compilar con OSX GCC, Windows GCC, Windows VS2005 así que no OS dependiente de hacks por favor.)
Solución
Intente lo siguiente:
- Uso
glutIgnoreKeyRepeat
para obtener sólo física keydown/evento keyup - Uso
glutKeyboardFunc
para registrar una devolución de llamada se escucha a los eventos keydown. - Uso
glutKeyboardUpFunc
para registrar una devolución de llamada se escucha para el evento keyup. - Crear un
bool keystates[256]
matriz para almacenar el estado de las teclas del teclado. - Cuando se recibe un evento a través de su keydown de devolución de llamada, conjunto
keystates[key] = true
. - Cuando se recibe un evento a través de su keyup de devolución de llamada, conjunto
keystates[key] = false
. - En su bucle de prueba, si
(keystates['a'] || keystates['A']) && (keystates['j'] || keystates['J'])
.
Mira en esa dirección.Aunque yo no lo he probado, debería funcionar.Usted también podría necesitar glutSpecialFunc
y glutSpecialUpFunc
recibir mensajes para 'especial' claves.
También, ser consciente de que el EXCESO de oferta es realmente cosas viejas y que no son mucho mejores alternativas.
Otros consejos
por "alternativa mejor" si se refiere a la función de entrada simple y GLUT-independiente a continuación tienes con la función GetAsyncKeyState ...
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow