KEYWAIT wird Ignoriert

Previous topic - Next topic

D2O

Hallo, das ganze bezieht sich auf das Posting hier 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?

Code (glbasic) Select
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
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

Schranz0r

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 ;)

Code (glbasic) Select
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
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard