Usando OpenGL / GLUT come avrei rilevare se due tasti sono premuti allo stesso tempo?

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

  •  22-08-2019
  •  | 
  •  

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

È stato utile?

Soluzione

Provare quanto segue:

  1. Usa glutIgnoreKeyRepeat per ottenere solo keydown fisico / eventi KeyUp
  2. Usa glutKeyboardFunc per registrare un callback ascoltando KeyDown eventi.
  3. Usa glutKeyboardUpFunc per registrare un callback ascoltando KeyUp eventi.
  4. Crea una matrice bool keystates[256] per memorizzare lo stato dei tasti della tastiera.
  5. Quando si riceve un evento attraverso il callback keydown, impostare keystates[key] = true.
  6. Quando si riceve un evento attraverso il callback keyup, impostare keystates[key] = false.
  7. 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 ...

MSDN - Funzione GetAsyncKeyState

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top