Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Jul 18, 2025 12:34

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Autor Nachricht
BeitragVerfasst: So Jan 15, 2006 17:13 
Offline
DGL Member
Benutzeravatar

Registriert: So Jan 15, 2006 17:06
Beiträge: 8
Wohnort: weida
hallo opengl freunde :)
was müsste man hier ändern, wenn die funktion auf mehrere tasten gleichzeitig reagieren soll ?
Code:
  1.  
  2. void keyboard(unsigned char ukey, int x, int y) {
  3.         if(ukey==key.forward) {
  4.                 move.eyeZ-=move.units;
  5.                 return;
  6.         }
  7.         if(ukey==key.backyard) {
  8.                 move.eyeZ+=move.units;
  9.                 return;
  10.         }
  11.         if(ukey==key.turnright) {
  12.                 return;
  13.         }
  14.         if(ukey==key.turnleft) {
  15.                 return;
  16.         }
  17.         if(ukey==key.strafeleft) {
  18.                 move.eyeX-=move.units;
  19.                 move.lookX-=move.units;
  20.                 return;
  21.         }
  22.         if(ukey==key.straferight) {
  23.                 move.eyeX+=move.units;
  24.                 move.lookX+=move.units;
  25.                 return;
  26.         }
  27.         if(ukey==key.jump) {
  28.                 return;
  29. .....
  30.  

mal angenommen ich drücke forwärts und springen gleichzeitg, dann wird nur vorwärts gewertet, da die if bedingung ganz vorn steht ...
sollte man hier zusätzliche prozesse oder threads reinbauen, um das problem zu ,lösen ?
gibt es alternativen ... mit SDL (sdl_pollevent) funktion hatte diese problem nicht ... ich wollte aber rein opengl proggn


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jan 15, 2006 17:22 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jul 17, 2002 12:07
Beiträge: 976
Wohnort: Tübingen
Ich arbeite bei Tastaturdingen immer mit GetAsyncKeyState. Die Funktion nimmt als Parameter die abzufragende Taste und liefert <0 wenn sie gerade gedrückt ist.
Eine Alternative wäre, (erdacht von Frase) wenn du ein Array of Boolean mit der Anzahl der Tasten auf dem Keyboard machst und immer wenn eine Taste gedrückt wird, wird das Element im Array auf true gesetzt, dass der Taste entspricht und wenn sie wieder losgelassen wird, wird sie auf false gesetzt. Dann musste nur immer testen, welche Tasten auf true stehen und welche auf false...

_________________
"Du musst ein Schwein sein in dieser Welt, sangen die Prinzen, das ist so 1.0. Du musst auf YouTube zeigen, dass dir dein Schweinsein gefällt, das ist leuchtendes, echtes Web 2.0."
- Hal Faber

Meine Homepage: http://laboda.delphigl.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jan 15, 2006 20:51 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 27, 2005 12:44
Beiträge: 393
Wohnort: Berlin
Programmiersprache: Java, C++, Groovy
Hallo rennreh,

wenn du mehrere Tasten gleichzeitig abfragen willst, wäre es am besten, wenn du in deiner Keyboard-Funktion jeweils eine boolean-Variable auf true setzt, falls eine Taste gedrückt wird.
Die Aktionen, die du in deiner Keyboard-Funktion ausführst, würde ich dann in die idle-Funktion packen.
Und diese dann abhängig von der jeweils gesetzten boolean-Variable ausführen.

Eine losgelassene Taste musst du mit einer glutKeyboardUp oder glutSpecialUp-Funktion abfangen, um die entsprechende boolean-Variable wieder auf false zu setzen.

Vergiss nicht vorher glutIgnoreKeyRepeat(true) zu setzen, sonst funktioniert das ganze nicht ;)

Schau mal, hier wird das ganze nochmal gut erklärkt : http://www.cg.tuwien.ac.at/courses/CG23/TipsundTricks.html#Tastatur%20und%20Maus

Viele Grüße
dj3hut1


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 5 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.007s | 16 Queries | GZIP : On ]