Usando OpenGL / GLUT come avrei rilevare se due tasti sono premuti allo stesso tempo?
Domanda
Usando OpenGL / GLUT come vorrei rilevare se due chiavi, dire 'a' e 'j' sono premuti allo stesso tempo?
(Questo programma ha bisogno di compilare con OSX GCC, GCC Windows, Windows VS2005 in modo che nessun OS hack dipendenti per favore.)
Soluzione
Provare quanto segue:
- Usa
glutIgnoreKeyRepeat
per ottenere solo keydown fisico / eventi KeyUp - Usa
glutKeyboardFunc
per registrare un callback ascoltando KeyDown eventi. - Usa
glutKeyboardUpFunc
per registrare un callback ascoltando KeyUp eventi. - Crea una matrice
bool keystates[256]
per memorizzare lo stato dei tasti della tastiera. - Quando si riceve un evento attraverso il callback keydown, impostare
keystates[key] = true
. - Quando si riceve un evento attraverso il callback keyup, impostare
keystates[key] = false
. - Nel vostro ciclo corsa, prova se
(keystates['a'] || keystates['A']) && (keystates['j'] || keystates['J'])
.
Cerca in quella direzione. Anche se non ho provato, dovrebbe funzionare. Potrebbe anche essere necessario glutSpecialFunc
e glutSpecialUpFunc
per ricevere i messaggi per i tasti 'speciali'.
Inoltre, essere consapevoli che GLUT è roba veramente vecchio e che non ci sono alternative molto più belli.
Altri suggerimenti
di "più bella alternativa" se si intende la funzione di ingresso più semplice e sovrabbondanza-indipendente poi ottenuto con la funzione GetAsyncKeyState ...