Keyboard key

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
MASH
Beiträge: 130
Registriert: 22.05.2005 17:43

Keyboard key

Beitrag von MASH »

Wenn ich ein sprite mit dem nächsten tastendruck anzeigen möchte dann funktioniert es ja auch aber wenn ich dann nocheinmal die gleiche routine danach ausführen möchte dann übernimmt der erste tastendruck auch gleichzeitig den zweiten so wird das zweite sprite also nicht angezeigt wie kann ich es machen das die taste erst wieder losgelassen werden muss.

Mit

Code: Alles auswählen

KeyboardReleased
ist es das gleiche

Code: Alles auswählen

ClearScreen(0, 0, 0)           ;Bildschirm RGB auf löschen
DisplaySprite(1, 0, 0)           ;Sprite anzeigen
  
StartDrawing(ScreenOutput())    ;Zeichenmodus öffnen
  DrawingMode(1)                ;Zeichenmodus festlegen (tranzparenter Hintergrund)
  Locate(200, 300)
  DrawText("BEN")         ;Der zu zeichnende Text
StopDrawing()                   ;Zecihenmodus beenden

FlipBuffers()                   ;BACK mit FRONT screen tauschen

;bis taste gedrückt wird warten
Repeat
  ExamineKeyboard()
Until KeyboardPushed(#PB_Key_All)


ClearScreen(0, 0, 0)    ;Bildschirm RGB auf löschen
DisplaySprite(2, 256, 0)  ;Sprite anzeigen
  
StartDrawing(ScreenOutput())    ;Zeichenmodus öffnen
  DrawingMode(1)                ;Zeichenmodus festlegen (tranzparenter Hintergrund)
  Locate(200, 300)              ;Zeichenposition festlegen
  DrawText("BEUM")             ;Der zu zeichnende Text
StopDrawing()                   ;Zecihenmodus beenden

FlipBuffers()                   ;BACK mit FRONT screen tauschen

;bis taste gedrückt wird warten
Repeat
  ExamineKeyboard()
Until KeyboardPushed(#PB_Key_right)
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Beitrag von bobobo »

nimm KeyboardReleased() statt KeyboardPushed()
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Benutzeravatar
MASH
Beiträge: 130
Registriert: 22.05.2005 17:43

Beitrag von MASH »

und wie bekommt man eine 3 sekunden Pause hin die man jeder zeit abbrechen kann?
Benutzeravatar
zigapeda
Beiträge: 1753
Registriert: 06.03.2005 17:22
Wohnort: Kaufbeuren
Kontaktdaten:

Beitrag von zigapeda »

ungefähr so oder:

Code: Alles auswählen

time = Elapsedmilliseconds() + 3000
Repeat
ExamineKeyboard()
Until time = ElapsedMilliseconds() or keyboardreleased(#pb_key_all)
kluger Mann + kluge Frau = Romanze | dummer Mann + dumme Frau = Schwangerschaft
kluger Mann + dumme Frau = Affäre | dummer Mann + kluge Frau = Shopping <)
Benutzeravatar
bluejoke
Beiträge: 1244
Registriert: 08.09.2004 16:33
Kontaktdaten:

Beitrag von bluejoke »

Da würd ich aber noch ein Delay reinmachen, sonst sag ich aber nix zu dem Code, gefällt mir zumindest stilistisch nicht :)

Code: Alles auswählen

time = Elapsedmilliseconds() + 3000
Repeat
ExamineKeyboard()
Delay(1)
Until time = ElapsedMilliseconds() or keyboardreleased(#pb_key_all)
Ich bin Ausländer - fast überall
Windows XP Pro SP2 - PB 4.00
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

bluejoke hat geschrieben:Da würd ich aber noch ein Delay reinmachen, sonst sag ich aber nix zu dem Code, gefällt mir zumindest stilistisch nicht :)

Code: Alles auswählen

time = Elapsedmilliseconds() + 3000
Repeat
ExamineKeyboard()
Delay(1)
Until time = ElapsedMilliseconds() or keyboardreleased(#pb_key_all)
Ich würds so machen(ist sicherer):

Code: Alles auswählen

time = Elapsedmilliseconds() + 3000
Repeat
ExamineKeyboard()
Delay(1)
Until time >= ElapsedMilliseconds() or keyboardreleased(#pb_key_all)
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Antworten