Problem mit KeyboardPushed

Für allgemeine Fragen zur Programmierung mit PureBasic.
Andi
Beiträge: 73
Registriert: 27.05.2008 17:29
Wohnort: Berlin

Problem mit KeyboardPushed

Beitrag von Andi »

Hallo,
ich habe folgendes Problem: eine Box soll sich nach einem Cursor-rechts-Klick nach rechts bewegen. Das tut sie auch. Leider wird die entsprechende if-Abfrage mehrmals durchlaufen, auch wenn es nur einen Tastendruck gibt. Das würde zwar besser mit KeyboardReleased funktionieren. Allerdings hat das den Nachteil, dass das Programm nicht so schnell auf das Releasen reagiert wie auf das Pushen. Gibt es eine Möglichkeit, die "unnötigen" Cursor-right-events unschädlich zu machen?

Code: Alles auswählen



Screen_Width = GetSystemMetrics_(#SM_CXSCREEN) 
Screen_Height = GetSystemMetrics_(#SM_CYSCREEN) 
Define Resolution.DEVMODE
Resolution.DEVMODE\dmSize = SizeOf(DEVMODE)
If EnumDisplaySettings_(0, #ENUM_REGISTRY_SETTINGS, @Resolution)
   col_depth = Resolution\dmBitsPerPel
EndIf

#sprite = 1

InitSprite()
InitKeyboard()

OpenScreen(Screen_Width, Screen_Height, col_depth, "Sprite-Example")

CreateSprite(#sprite, 50, 50)
   StartDrawing( SpriteOutput(#sprite) )
      Box(0, 0, 50, 50, #Red)
   StopDrawing()

x=0   
   
Repeat
      
    ClearScreen(RGB(0,0,0))
    
    ExamineKeyboard()
    
    If KeyboardPushed(#PB_Key_Right)
       x = x + 50
       Debug Str(x)         
    EndIf   
 
    DisplaySprite(#sprite, 100 + x, 250)
    
    FlipBuffers()
    
Until KeyboardPushed(#PB_Key_Escape)
PB + B4X = greatest tools on earth
Win 10 | PB 5.72
RalfP
Beiträge: 23
Registriert: 17.03.2014 22:32

Re: Problem mit KeyboardPushed

Beitrag von RalfP »

Hallo Andi,

mit dem folgenden Code geht es:

Code: Alles auswählen


Screen_Width = GetSystemMetrics_(#SM_CXSCREEN) 
Screen_Height = GetSystemMetrics_(#SM_CYSCREEN) 
Define Resolution.DEVMODE
Resolution.DEVMODE\dmSize = SizeOf(DEVMODE)
If EnumDisplaySettings_(0, #ENUM_REGISTRY_SETTINGS, @Resolution)
   col_depth = Resolution\dmBitsPerPel
EndIf

#sprite = 1

InitSprite()
InitKeyboard()

OpenScreen(Screen_Width, Screen_Height, col_depth, "Sprite-Example")

CreateSprite(#sprite, 50, 50)
   StartDrawing( SpriteOutput(#sprite) )
      Box(0, 0, 50, 50, #Red)
   StopDrawing()

x=0   
y = 0

Repeat
      
    ClearScreen(RGB(0,0,0))
    
    ExamineKeyboard()
    
    If KeyboardPushed(#PB_Key_Right) 
      If y = 0
        x = x + 50
        Debug Str(x) 
      EndIf  
      y = 1
    Else   
      y = 0
    EndIf   
 
    DisplaySprite(#sprite, 100 + x, 250)
    
    FlipBuffers()
    
Until KeyboardPushed(#PB_Key_Escape)

Grüße
Ralf
Andi
Beiträge: 73
Registriert: 27.05.2008 17:29
Wohnort: Berlin

Re: Problem mit KeyboardPushed

Beitrag von Andi »

Hi, Ralf, perfekt! Danke!! :allright:
PB + B4X = greatest tools on earth
Win 10 | PB 5.72
Antworten