Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

21.06.2007, 00:05

abfrage tastatur

hallo,
ich habe ein Problem und finde einfach keine Lösung:

Zunächst nutze ich die Konsole. Hier wird die Steuerung konfiguriert. Dabei fange ich die Eingabe mit getch() ab. Funktioniert ohne Probleme.
Nach der Konfiguration öffne ich ein Grafikfenster mit SDL, welches ja nun die Abfrage der Tastatur übernimmt.
Ich nutze folgende Funktion zur Abfrage unter SDL:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
bool testKey(SDLKey key)
{
    Uint8* keyState = SDL_GetKeyState(NULL);

    if(key < 0 || key >= 322)
    {
        //LogError("Testing Invalid Key");
        return false;
    }
    
    return keyState[key];


Wie kann ich denn nun überprüfen, ob die die in der Konsole angegebene Taste später gedrückt wird. Ich habe hier ja zwei völlig verschiedene Variablentypen.
Das Programm ist für Linux. Nutze unter anderem noch curses.h

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

2

21.06.2007, 02:01

Ich bin mir jetzt nicht ganz sicher, was du eigentlich willst...

1. einfach warten bis eine Taste gedrückt ist:

C-/C++-Quelltext

1
2
3
4
while (! testKey(SDLKey /*was auch immer*/) )
{
  // muss man was updaten?

}


2. warten bis eine Taste gedrückt wird:

C-/C++-Quelltext

1
2
3
4
5
bool pressed, oldpressed=true;
while ( ( pressed=testKey(SDLKey /*was auch immer*/) ) && (! oldpressed) )
{
  oldpressed=pressed;
};


3. einfach nur erklärt kriegen, dass keyState[key] als Returnvalue in bool konvertiert wird und die korrekte Schreibweise wäre:

C-/C++-Quelltext

1
return (keyState[key]!=0);


// edit
oder meinst du 4. den Unterschied zwischen getch() und SDLKey?
In diesem Fall wirst du wahrscheinlich dein getch() Ergebnis manuell umstellen müssen (z.b. per switch/case)

3

21.06.2007, 14:34

1. Würde ich das nicht mit getch abfangen ... sdl hat eigene Funktionen
2. Ich würde das auch nicht wie grek40 machen, das is busy-waiting, soll heißen solange keine taste gedrückt wird... passiert nichts

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
while(SDL_PollEvent(&event))
{
 case SDL_KEYDOWN:
 // musst mal im sdl-tut nachgucken... weiß nicht wie die Tasten alle heißen

 break;
 case SDL_MOUSEMOTION:
 // Maus wurde bewegt --- aktion

 break;
 // Und wenn nichts passiert, geht er aus der while raus

}


Hier mein ein Tutorial
http://www.pennergame.de/functions/generate_signature_114955.jpg

Wo die Fähigkeiten aufhören ... fängt der Optimismus an

"Unendlichkeit ist der Mangel an Grenzen" Aristoteles

4

21.06.2007, 19:04

danke erstmal.
Meine einzelnen Abfragen funktionieren. Bin damit voll zufrieden. Nur möchte ich nicht im Programm die Tasten schon festlegen. Der Anwender legt vor Programmstart die Tasten in der Konsole fest. Hinterher möchte ich über SDL überprüfen, ob die vorher gewählte Taste gedrückt wird.
Mein Problem ist nun, dass ich die gespeicherten Tasten (aus Konsole) nicht mit den gedrückten (SDL) vergleichen kann. Habe halt einmal char, einmal SDLkey


das hier trift es denke ich

Zitat

oder meinst du 4. den Unterschied zwischen getch() und SDLKey?
In diesem Fall wirst du wahrscheinlich dein getch() Ergebnis manuell umstellen müssen (z.b. per switch/case)


Also gibt es keine Funktion, die mir die getch automatisch in SDLkey format konvertiert?

5

21.06.2007, 19:16

Zitat von »"tuaregs"«

Also gibt es keine Funktion, die mir die getch automatisch in SDLkey format konvertiert?

Nein weil SDL nichts direkt mit Windows zu tun hat. SDL ist halbwegs plattform unabhängig, darum gibt es keine Konvertierung zwischen den beiden.
http://www.pennergame.de/functions/generate_signature_114955.jpg

Wo die Fähigkeiten aufhören ... fängt der Optimismus an

"Unendlichkeit ist der Mangel an Grenzen" Aristoteles

Werbeanzeige