13 Stimmen

Mit OpenGL /GLUT wie würde ich erkennen, wenn zwei Tasten gleichzeitig gedrückt werden?

Mit OpenGL /GLUT wie würde ich erkennen, wenn zwei Tasten, sagen wir 'a' und 'j' zur gleichen Zeit gedrückt werden?

(Dieses Programm muss mit OSX GCC, Windows GCC, Windows VS2005 kompiliert werden, also bitte keine OS-abhängigen Hacks).

21voto

Trillian Punkte 5947

Versuchen Sie das Folgende:

  1. Utilisez glutIgnoreKeyRepeat um nur physische Tastendruck-/Tastenaufwärts-Ereignisse zu erhalten
  2. Utilisez glutKeyboardFunc um einen Rückruf zu registrieren, der auf Tastendruck-Ereignisse reagiert.
  3. Utilisez glutKeyboardUpFunc um einen Rückruf zu registrieren, der auf Keyup-Ereignisse wartet.
  4. Erstellen einer bool keystates[256] Array, um den Zustand der Tastaturtasten zu speichern.
  5. Wenn Sie ein Ereignis über Ihren Keydown-Callback empfangen, setzen Sie keystates[key] = true .
  6. Wenn Sie ein Ereignis über Ihren Keyup-Callback empfangen, setzen Sie keystates[key] = false .
  7. Testen Sie in Ihrer Ausführungsschleife, ob (keystates['a'] || keystates['A']) && (keystates['j'] || keystates['J']) .

Schauen Sie in diese Richtung. Ich habe es zwar nicht getestet, aber es sollte funktionieren. Sie benötigen möglicherweise auch glutSpecialFunc y glutSpecialUpFunc um Nachrichten für "besondere" Schlüssel zu erhalten.

Seien Sie sich auch bewusst, dass GLUT ein sehr altes Produkt ist und dass es viel bessere Alternativen gibt.

5 Stimmen

Können Sie mehr über diese schöneren Alternativen sagen?

0voto

user2977702 Punkte 11

Wenn Sie mit "schönere Alternative" eine einfachere und von der Glut unabhängige Eingabefunktion meinen, dann sollten Sie die Funktion GetAsyncKeyState verwenden...

MSDN - Funktion GetAsyncKeyState

0 Stimmen

Dies ist nur für Windows. Und Windows ist wirklich alt und es gibt viel schönere Alternativen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X