Irgendwie raffe ich es nicht, wie man mit dem GETTIMER umgeht.
Kann mir irgendjemand anhand meines Beispieles erklären, wo ich
meinen Fehler mache ?
GuthabenTaste = 200 // Pfeil-Taste hoch
FortsetzenTaste = 208 // Pfeil-Taste runter
ProgrammEndeTaste = 28 // Enter-Taste
PRINT "Start", 50, 200
SHOWSCREEN
Takt = 500 // Alle ?/1000-Sekunde soll nach einem Tasten-Druck gefragt werden
Taste = 999
WarteTaste = FortsetzenTaste
WHILE Taste = 999
Zeit = GETTIMER()
DRAWRECT 50, 300, 300, 32, Weiss
PRINT Zeit, 50, 300
KeyHitUpdate()
Weiter = KeyHit(GuthabenTaste)
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, Weiss
PRINT "Guthaben-Taste", 50, 200
PRINT Weiter, 50, 500
SHOWSCREEN
KEYWAIT
ENDIF
IF KEY (WarteTaste) = 1 // funz
Taste = FortsetzenTaste
PRINT "Warte-Taste", 50, 200
SHOWSCREEN
ENDIF
IF KEY (ProgrammEndeTaste) = 1 // funz
PRINT "Warte-Taste", 50, 200
SHOWSCREEN
BREAK
ENDIF
WEND // Taste = 999
KEYWAIT
[attachment deleted by admin]
Hier mal meine Interpretation von Deinem Code:
Achtung!! Es scheint sich ein Bug in KEYWAIT eigeschlichen zu haben, werds genauer testen und wenn Notwendig
ins Bug Forum posten.
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
END
wieso soll alle 1 Sec nach der Taste gefragt werden ?
Ich glaube ihr macht beide nen Fehler :D
Keyhit ist unabhängig von der Zeit her, zumindest bei D²0.
Wenn ich den Sinn verstehen würde, könnte ich helfen. Aber so versteh ich halt net um was es den genau geht?!
Meine Vermutung wo dein Problem ist :
Eine Taste abhängig mit Zeit machen (Taste nur alle 2 Sek verfügbar, oder schon länger als 2 Sek nicht mehr gedrückt, dann bei drück verfügbar)
Also ganz Simpel:
LOCAL Verzoegerung = 2000 // 2 Sek verzögerung bis zur Anzeige von
WHILE TRUE
IF KEY(57) AND Timer < GETTIMERALL() // Key 57 = Spacebar
PRINT "WOHOO GEHT!",10,10
Timer = GETTIMERALL()+Verzoegerung
ENDIF
SHOWSCREEN
WEND
END
Bitte den Code nicht falsch verstehen. Das ist nur ein Test-Beispiel, indem ich bewußt Werte genommen, die das Problem möglichst klar machen.
Die realen Werte werden nachher anders sein und müssen noch ausgelotet werden.
Trotzdem meine ich, dass es eigentlich funktionieren müsste.
Der 1. SHOWSCREEN kommt gleich am Anfang, damit GETTIMER einen Referenz-Punkt hat.
Selbst wenn ich die Taste nach 5 oder 10 Min. einzeln oder dauerhaft halte, passiert nichts.
Müsste aber, nach meiner Einschätzung, weil der Wert von [Takt] dann schon mehrfach
überschritten ist, ergo dürfte die IF-Anweisung nicht ausgeführt werden.
Wird sie aber scheinbar doch oder was kann sonst der Grund sein?
Obendrein kommt ja noch, dass die beiden IF KEY-Anweisungen funktionieren.
Ich beschreibe mal kurz die Problemstellung. Vielleicht habt Ihr ja einen anderen Lösungsvorschlag?
Die Pfeil-Oben-Taste soll einen Counter immer um 1 hochzählen und
zwar unabhängig davon, ob die Taste mehrfach einzeln gedrückt oder
einfach nur 1 mal gedrückt und dann gehalten wird.
Der folgende SHOWSCREEN soll aber die Zeit bekommen jeden einzelnen Couter-Wert
für den User auch wahrnehmbar anzuzeigen.
Bei einzelnen Tasten-Anschlägen funktioniert das auch wunderbar.
Aber wenn die Taste gehalten wird, dann sind die Bild-Folgen so schnell, dass man nur
jeden 2. oder 3. Wert zu sehen bekommt.
Habt Ihr eine Idee, wie man das in beiden Fällen erreichen kann ?
Schau mal da:
http://www.glbasic.com/forum/index.php?topic=2446.msg18517#msg18517