I want to implement a keyboard toggle, press Space to pause animation, press Space again to continue. Reading the keyboard with keydown(), it's often the case the Space is down for longer than one iteration of the game loop, causing a pause and unpause when pressed and released. I've added a dealy (wait 150 ms after pressing key) along with flushing the keyboard, but it's far from ideal.
Any ideas on a nicer way to do this?
EDIT : I could always try KeyHit() instead! Doh!
is this of any use
;
While Not KeyDown ( 1 )
Cls
k=GetKey()
If k=32 ; spacebar
Text 150,100, "paused"
Repeat : k=GetKey() : Until k=32
Else
Text 150,100, "game on"
EndIf
VWait
Wend
End
While Not KeyHit(1)
If KeyHit ( 57 )
Repeat
Cls
Text 10,10, " PAUSE"
Flip 1
Until KeyHit ( 57 )
EndIf
Cls
Text 10,10, "NO PAUSE"
Flip 1
Wend
------------------------
www.moonworx.de
paused=0
repeat
if keyhit(57) then paused=1-paused
if paused=0 then
;do whatever you do when the game is not paused
else
;do whatever you do when the game is paused
endif
until keydown(1)
Yeah, KeyHit's the way to go. If the user holds it down it still returns 0, only returning a change in state.
Thanks all.
what i used in a program i wrote
If KeyHit(25) ; pause P
CopyRect 0, 0, screenWidth, screenHeight, 0, 0, FrontBuffer(), BackBuffer()
SetFont fntTimes70B : Color 0, 0, 0
Text (screenWidth - 4) / 2, 200, "P A U S E D", True, False
Color 255, 255, 255 : Text (screenWidth) / 2, 196, "P A U S E D", True, False
Flip
While Not KeyHit(25)
Wend
FlushKeys
SetFont fntTimes20B
EndIf
If KeyHit(25) ; pause P
FLUSHKEYS; <---------- it wont store the keyhit if your still holding the space bar down
CopyRect 0, 0, screenWidth, screenHeight, 0, 0, FrontBuffer(), BackBuffer()
SetFont fntTimes70B : Color 0, 0, 0
Text (screenWidth - 4) / 2, 200, "P A U S E D", True, False
Color 255, 255, 255 : Text (screenWidth) / 2, 196, "P A U S E D", True, False
Flip
While Not KeyHit(25)
Wend
FlushKeys
SetFont fntTimes20B
EndIf