Sporadische Events von Keyboardreleased

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Alves
Beiträge: 1208
Registriert: 19.04.2006 18:24
Kontaktdaten:

Sporadische Events von Keyboardreleased

Beitrag von Alves »

Hi, da bin ich mal wieder mit auch mal was Code.

Also bei mir ist es so, dass ich mehrere Bilder nacheinander anzeigen lasse, so ähnlich wie Powerpoint.

Mit Pfeil Links und Rechts lässt sic hdie Bildid verändern, also Bild davor, näxchstes Bild.

Bloß reagiert Keyboardreleased sehr sporadisch auf die EIngaben, irgendwelche Vorschläge?

Code: Alles auswählen

Enumeration
  #bild1
  #bild2
  #bild5
  #bild3
  #bild4
EndEnumeration  

Global bildid
Global bildx
Global bildx
Global zaehler

bild1.s="C:\hallotestordner\hallo.bmp"
bild2.s="C:\hallotestordner\hallo2.bmp"
bild3.s="C:\hallotestordner\hallo3.bmp"
bild4.s="C:\hallotestordner\hallo4.bmp"
bild5.s="C:\hallotestordner\hallo5.bmp"
zaehler=1
mouse=0

InitSprite()
InitMouse()
InitKeyboard()

OpenScreen(1024, 768, 32, "Die Simpsons - Kurzreferat") 

LoadSprite(#bild1, bild1)
LoadSprite(#bild2, bild2)
LoadSprite(#bild3, bild3)
LoadSprite(#bild4, bild4)
LoadSprite(#bild5, bild5)

Repeat
  Select zaehler
    Case 1
      bildid = #bild1
    Case 2
      bildid = #bild2
    Case 3
      bildid = #bild3
    Case 4
      bildid = #bild4
    Case 5
      bildid = #bild5
  EndSelect
          
  bildx = 1024-SpriteWidth(bildid)
  bildx = bildx/2
  bildy = 768-SpriteHeight(bildid)
  bildy = bildy/2
  
  
  ExamineMouse()
  ExamineKeyboard()
  ClearScreen(0,0,0)
  DisplayTransparentSprite(bildid, bildx, bildy)
  FlipBuffers()
  
  

  If KeyboardReleased(#PB_Key_Right)
    zaehler+1
  ElseIf KeyboardReleased(#PB_Key_Left)
    zaehler-1
  EndIf  
  
  ;Delay(0)
  
Until KeyboardPushed(#PB_Key_Escape)  
   
  
PS: Ja, zu Testzwecken benutze ich gern das Wort "hallo" :freak:
Benutzeravatar
roherter
Beiträge: 1407
Registriert: 10.04.2005 18:58
Kontaktdaten:

Beitrag von roherter »

benutze Getasynckeystate_() ,werte müsste ich nachschlagen sag bescheid wenn du sie brauchst
:)
Purebasic 5.0 32bit und 64 bit

I'm back from hell
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

Ist mir vor kurzem auch aufgefallen in PB 4
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.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

> benutze Getasynckeystate_()

auf gar keinen Fall!

wozu gibts 'ne Keyboard-Lib.



@Alves

probier mal, auf das Push zureagieren statt auf das released.
natürlich musst du dann nen Flag einbaun, damits dir nich wegläuft.
außerdem solltest du Minimum und Maximum des Zählers prüfen,
ich hab dafür mal 2 konstanten ergänzt...

check doch mal, obs damit soweit funzt,
natürlich musst du am anfang des programms die Konstanten noch auf adäquate werte setzen.

Code: Alles auswählen

  If KeyboardPushed(#PB_Key_Right) And Key = 0
    Key = 1
    zaehler+1 
    If zaehler > #Zaehl_Max
      zaehler = #Zaehl_Min
    EndIf
  ElseIf KeyboardPushed(#PB_Key_Left) And Key = 0
    Key = 1
    zaehler-1 
    If zaehler < #Zaehl_Min
      zaehler = #Zaehl_Max
    EndIf
  Else
    Key = 0
  EndIf
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Alves
Beiträge: 1208
Registriert: 19.04.2006 18:24
Kontaktdaten:

Beitrag von Alves »

Die Werte zu Getasynckeystate habe ich, aber da habe ich wieder das gleiche Problem, was ich schon mit Keyboardreleased umgehen wollte.

Er zählt nämlich auch bei gedrückt gehalten den Zähler hoch.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

schau mal oben...

ich arbeite lieber mit Flags als mit Released, weil ich es lieber habe,
wenn mein prog gleich reagiert, nicht hinterher.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Alves
Beiträge: 1208
Registriert: 19.04.2006 18:24
Kontaktdaten:

Beitrag von Alves »

Danke für deine Routine, aber sie bringt die gleichen Mögklichkeiten mit wie Keyboardpushed, allerdings mit Zaehl_Min. Sie reagiert so, als hätte sie gar keine Flags, da sie einfach mit einmal drücken die ganzen Bilder druchläuft.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

yo.. isn Flüchtigkeitsfehler drin...

mom...

[edit]
argl.. voll die denkblockade... ich hab sowas doch schon 37.000mal gemacht...

mom...

[edit2]
so, nun aber..

das elseif hatte mich etwas durcheinander gebracht...
das macht es gleich viel komplexer.
hier mal die lösung mit komplett getrennten Ifs für die beiden tasten:

Code: Alles auswählen

  If KeyboardPushed(#PB_Key_Right) 
    If Right = 0
      Right = 1
      zaehler+1 
      If zaehler > #Zaehl_Max
        zaehler = #Zaehl_Min
      EndIf
    EndIf
  Else
    Right = 0
  EndIf 
  
  If KeyboardPushed(#PB_Key_Left) 
    If Left = 0
      Left = 1
      zaehler-1 
      If zaehler < #Zaehl_Min
        zaehler = #Zaehl_Max
      EndIf
    EndIf
  Else
    Left = 0
  EndIf 
man könnte das Flag auch in ein komplett umschließendes IF mit #PB_Key_Any einbaun,
wenn man immer nur eine taste zur zeit drücken kann...

so is aber irgendwie klarer und übersichtlicher.

(edit: copyfehler korrigiert)
Zuletzt geändert von Kaeru Gaman am 26.09.2006 19:00, insgesamt 1-mal geändert.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

KeyboardPushed(#PB_Key_Left) ist kein einmaliges ereignis, sonder steht solange an wie die Taste gedrückt wird.

Müste so gehen. Nicht getestet

Code: Alles auswählen

If KeyboardPushed(#PB_Key_Left)
  If fm_left_key = 0 ; Flankenmerker
    x + 1
    fm_left_key = 1 ; Flankenmerker setzen
  EndIf
EndIf
If KeyboardPushed(#PB_Key_Left) = 0
  If fm_left_key
    fm_left_key = 0 ; Flankenmerker rücksetzen
  EndIf
EndIf
FF :wink:

Edit: zu langsam
Zuletzt geändert von mk-soft am 26.09.2006 18:50, insgesamt 1-mal geändert.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

@mk

genau.

schau dir mein 2tes edit an.

ist praktisch genauso wie deines, bis darauf, dass anstatt des zweiten If ein Else auch reicht... ;)
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten