Hallo, das ganze bezieht sich auf das Posting hier http://www.glbasic.com/forum/index.php?topic=2444.0 (http://www.glbasic.com/forum/index.php?topic=2444.0)
Bei diesem Code wird am Ende der Schleife nochmals Keywait gesetzt, das wird aber Ignoriert und das Programm wird beendet.
Warum?
GuthabenTaste = 200 // Pfeil-Taste hoch
FortsetzenTaste = 208 // Pfeil-Taste runter
ProgrammEndeTaste = 28 // Enter-Taste
WarteTaste = FortsetzenTaste
PRINT "Start", 50, 200
SHOWSCREEN
Takt = 3000 // Alle ?/1000-Sekunde soll nach einem Tasten-Druck gefragt werden
Taste = 999
Ende = 0
timertemp = GETTIMERALL() // Einmal initialisieren
WHILE Ende = 0// Taste = 999 ///???????????????????????????
Zeit = GETTIMERALL() //GETTIMER()
IF (Zeit-timetemp) > Takt
timetemp = Zeit
Weiter = 0
ENDIF
DRAWRECT 50, 300, 300, 32, RGB(0xff, 0xff, 0xff)
PRINT Zeit, 50, 300
KeyHitUpdate()
// Weiter = KeyHit(GuthabenTaste)
IF KeyHit(GuthabenTaste) = 1
Weiter = 1
timertemp = GETTIMERALL()
ENDIF
// IF Zeit < Takt THEN Weiter = 0 // <<<<<<< Solange die Abfrage aktiv ist, ...
IF Weiter <> 0 // <<<<<<<<<<<<<<<<<<<<<< Will er hier einfach nicht rein ! Egal wie lange ich
// die richtige Taste drücke.
DRAWRECT 50, 500, 300, 32, RGB(0xff, 0xff, 0xff) // Weiss <<<< ????????????????????????
PRINT "Guthaben-Taste", 50, 200
PRINT Weiter, 50, 500
// SHOWSCREEN
// KEYWAIT
ENDIF
IF KEY (WarteTaste) = 1 // funz
BLACKSCREEN
Taste = FortsetzenTaste
PRINT "Warte-Taste", 50, 200
// SHOWSCREEN
ENDIF
SHOWSCREEN
IF KEY (ProgrammEndeTaste) = 2 // funz
PRINT "Beenden, Bitte eine Taste Drueken", 50, 200
SHOWSCREEN
Ende = 1
ENDIF
WEND // Taste = 999
KEYWAIT //////////<<<<<<<<<<<<<<<<<<<<<<<<<< DAS HIER !!!!!!!!!!!!!!!!!!!!!!!!!!
END
Kein Bug!
Benutzt Keyhit ganz oder garnicht ;)
Zudem beim Beenden der Sachen das Releaseevent nutzen ( -1 )!
Sonst wird die Taste gleich nochmal gedrückt, der Computer ist ein wenig schneller als du ;)
GuthabenTaste = 200 // Pfeil-Taste hoch
FortsetzenTaste = 208 // Pfeil-Taste runter
ProgrammEndeTaste = 28 // Enter-Taste
WarteTaste = FortsetzenTaste
PRINT "Start", 50, 200
SHOWSCREEN
Takt = 3000 // Alle ?/1000-Sekunde soll nach einem Tasten-Druck gefragt werden
Taste = 999
Ende = 0
timertemp = GETTIMERALL() // Einmal initialisieren
WHILE Ende = 0// Taste = 999 ///???????????????????????????
Zeit = GETTIMERALL() //GETTIMER()
IF (Zeit-timetemp) > Takt
timetemp = Zeit
Weiter = 0
ENDIF
DRAWRECT 50, 300, 300, 32, RGB(0xff, 0xff, 0xff)
PRINT Zeit, 50, 300
KeyHitUpdate()
// Weiter = KeyHit(GuthabenTaste)
IF KeyHit(GuthabenTaste) = 1
Weiter = 1
timertemp = GETTIMERALL()
ENDIF
// IF Zeit < Takt THEN Weiter = 0 // <<<<<<< Solange die Abfrage aktiv ist, ...
IF Weiter <> 0 // <<<<<<<<<<<<<<<<<<<<<< Will er hier einfach nicht rein ! Egal wie lange ich
// die richtige Taste drücke.
DRAWRECT 50, 500, 300, 32, RGB(0xff, 0xff, 0xff) // Weiss <<<< ????????????????????????
PRINT "Guthaben-Taste", 50, 200
PRINT Weiter, 50, 500
// SHOWSCREEN
// KEYWAIT
ENDIF
IF KeyHit (WarteTaste) = 1 // funz
BLACKSCREEN
Taste = FortsetzenTaste
PRINT "Warte-Taste", 50, 200
// SHOWSCREEN
ENDIF
IF KeyHit (ProgrammEndeTaste) = 2 // funz
PRINT "Beenden, Bitte eine Taste Drueken", 50, 200
ENDIF
IF KeyHit(ProgrammEndeTaste) = -1
Ende = 1
ENDIF
SHOWSCREEN
WEND // Taste = 999
BLACKSCREEN
PRINT "Bitte erneut Taste druecken!", 10,10
SHOWSCREEN
KEYWAIT //////////<<<<<<<<<<<<<<<<<<<<<<<<<< DAS HIER !!!!!!!!!!!!!!!!!!!!!!!!!!
END
// Update keyboard state
FUNCTION KeyHitUpdate:
GLOBAL gKeyDown[], gKeyState[]
LOCAL k
// First Time call/ zum ersten Mal hier
IF BOUNDS(gKeyDown[],0)=0
DIM gKeyDown[256]
DIM gKeyState[256]
ENDIF
// For each key / für jede Taste
FOR i=0 TO 255
k = KEY(i)
// Key is pressed / Taste ist gedrückt
IF k
IF gKeyDown[i]
gKeyState[i]=1
ELSE
gKeyDown[i]=1
gKeyState[i]=2
ENDIF
ELSE
// Key is not pressed / Taste nicht gedrückt
// Has key been pressed before?
// War die Taste gedrückt?
IF gKeyDown[i]
gKeyDown[i] = 0
gKeyState[i] = -1
ELSE
gKeyState[i]=0
ENDIF
ENDIF
NEXT
ENDFUNCTION
// 0 = not pressed / nicht gedrückt
// 2 = just pressed / gerade runtergedrückt
// 1 = pressed / gedrückt (gehalten)
// -1 = release event / wieder losgelassen
FUNCTION KeyHit: nkey
RETURN gKeyState[nkey]
ENDFUNCTION