GLBasic forum

Other languages => GLBasic - de => Topic started by: Alexander on 2005-Feb-09

Title: Key()
Post by: Alexander on 2005-Feb-09
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
Title: Key()
Post by: D2O on 2005-Feb-09
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.
Title: Key()
Post by: Alexander on 2005-Feb-09
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 ;)
Title: Key()
Post by: Kitty Hello on 2005-Feb-10
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.
Title: Key()
Post by: Alexander on 2005-Feb-10
Hi,

das ist genau die Antwort die ich wollte ;)