Usando OpenGL /GLUT ¿cómo puedo detectar si dos teclas se mantienen presionadas al mismo tiempo?

StackOverflow https://stackoverflow.com/questions/866679

  •  22-08-2019
  •  | 
  •  

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.)

¿Fue útil?

Solución

Intente lo siguiente:

  1. Uso glutIgnoreKeyRepeat para obtener sólo física keydown/evento keyup
  2. Uso glutKeyboardFunc para registrar una devolución de llamada se escucha a los eventos keydown.
  3. Uso glutKeyboardUpFunc para registrar una devolución de llamada se escucha para el evento keyup.
  4. Crear un bool keystates[256] matriz para almacenar el estado de las teclas del teclado.
  5. Cuando se recibe un evento a través de su keydown de devolución de llamada, conjunto keystates[key] = true.
  6. Cuando se recibe un evento a través de su keyup de devolución de llamada, conjunto keystates[key] = false.
  7. 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 ...

MSDN - Función GetAsyncKeyState

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top