Seite 1 von 1

Problem mit KeyboardPushed

Verfasst: 13.03.2022 19:18
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)

Re: Problem mit KeyboardPushed

Verfasst: 13.03.2022 21:49
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

Re: Problem mit KeyboardPushed

Verfasst: 13.03.2022 22:19
von Andi
Hi, Ralf, perfekt! Danke!! :allright: