Key()

Previous topic - Next topic

Alexander

Hi,

nachdem ich GLBasic erst 3 Tage verwende kann sein das ich vielleicht was übersehen habe, aber hier meine Frage:

Kann man auch irgendwie direkt abfragen ob nun nur eine Taste gedrückt wurde?
Bei Key muss ich ja immer einen Tastencode als Parameter angeben, was aber beispielsweise eine kleine Richtungsabfrage der Cursortasten ziemlich konfus aussehen lässt:

Code (glbasic) Select
IF KEY(208)
  // Runter
ELSE
  IF KEY(200)
    // Oben
  ELSE
    IF KEY(203)
      // Links
    ELSE
      IF KEY(205)
        // Rechts
      ELSE
        // keine Richtungstaste
      ENDIF
    ENDIF
  ENDIF
ENDIF

Natürlich könnte ich das ganze auch immer mit IF/ENDIF machen, allerdings würde dann falls alle 4 Tasten gleichzeitig gedrückt werden jede Bedingung erfüllt werden und ich müsste erst noch andere Variablen "missbrauchen" um festzustellen ob keine der 4 Tasten gedrückt werden...

Hätte man eine Möglichkeit die Tasten abzufragen könnte man das ganze in etwa so lösen:

Code (glbasic) Select
SELECT Taste
  CASE 208
    // Runter
  CASE 200
    // Oben
  CASE 203
    // Links
  CASE 205
    // Rechts
  DEFAULT
    // keine Richtungstaste
 ENDSELECT

Wäre wesentlich übersichtlicher, oder? :rolleyes:
Was natürlich auch ganz nett wäre, wäre ELSEIF / ELSE IF

D2O

Hi Alexander, bin gerade beim Malochen ;)

Schau mal nach einem befehle so ähnlich wie getchar(),char(), get_char().

Aber ich würde lieber die scancodes verwenden wie oben key(1)...
hier weis das Programm/Compiler gleich nach was er such soll.
Bei den Getchar() sachen muss erst Programintern alles durchgeprüft werden, ist etwas Langsamer.
(Solte ich hier mist geschrieben haben, mir gleich eins auf den Kopfgeben :)  )

Dann find ich, sollte die If abfrage etwas geändert werden.
Pseudocode:
if Key(links) and not Key(rechts)and not Key(oben)and not Key(unten)

Hier hast Du dann beseerre Möglich keiten einen Spieler auch schräg laufen zu lasen.
Ist Dafür auch etwas mehr schreibarbeit.
CU.
I7 2600K; 8 GB RAM ; Win10 Pro x64 | NVidia GTX 750 TI 2048MB ; Realtec OnBoard Sound;
Lenovo ThinkPad T400: XP Pro
GLB Premium-immer Aktuell

Alexander

Hi Slayer,

an die Abfrage mit AND hatte ich nicht gedacht...

Wie gesagt, hab erst vor ein paar Tagen mit GLBasic angefangen ein bisschen rumzuspielen und vorher eigentlich nur Windowsprogramme mit PureBasic geschrieben :)

Spiele sind halt doch ein bisschen was anderes ;)

Aber ELSEIF wäre natürlich der Übersichtlichkeit trotzdem nicht schlecht ;)

Kitty Hello

Hi,

ich mach das immer so:

Code (glbasic) Select
WHILE TRUE
  dx = KEY(205) - KEY(203)
  dy = KEY(208) - KEY(200)
  PRINT "DX: "+ dx + " DY: " + dy, 100, 100
SHOWSCREEN
WEND
Wenn der Spieler nicht schräg gehen darf, dann noch:
Code (glbasic) Select
 IF dx THEN dy=0 // oder anders 'rum
elseif ist natürlich manchmal fein. Das werd ich einbauen.

Alexander

Hi,

das ist genau die Antwort die ich wollte ;)