How can I disable a key from being used?

Blitz3D Forums/Blitz3D Beginners Area/How can I disable a key from being used?

Captain Wicker (crazy hillbilly)(Posted 2012) [#1]
How can I disable a key from being used?
Here is what I am trying to do
If KeyHit(57)
    DisableKey(57)
EndIf

How?


Yue(Posted 2012) [#2]
FlushKeys()


[Edit]
Local State_Key% = False
Local Key_Space% = 57

If KeyHit(Key_Space%) = True And State_Key% = False
Print "Key 57 Hit"
State_Key% = true
End If 


Last edited 2012


Midimaster(Posted 2012) [#3]
With computer languages you can only affect things inside the computer, you have no change to manipulate the user. So...

How can I disable a key from being used?


...the anser is No way! ;-)


But, why not simply ingnore it? In Blitz nothing happens with keys before you did not code it. So, if you will not allow SPACE to be added to a string, do not add it:
Local Name$
Repeat
     Key=GetKey()
     If Key>0 then
          Name=Name+ Chr(Key)
     Endif
     Print Name
Until KeyHit(1)


becomes:

Local Name$
Repeat
     Key=Allowed( GetKey() )
     If Key>0 then
          Name=Name+ Chr(Key)
     Endif
     Print Name
Until KeyHit(1)


Function Allowed%(Key%)
     ; GetKey works with ASCII not Scancodes!
     If Key= 0 Then Return 0
     If Key= 32 Then Return 0
     ; more lines here f.e. forbid all numbers:
     If (Key>47) and (Key< 58) Then Return 0

     Return Key
End Function



This also could be a possibility to switch key permission ON or OFF during the game:

Dim CancelKey%(255)
CancelKey(57)=TRUE
For i%=48 to 57
     CancelKey(i)=TRUE
Next
Time=Millisecs()+10*1000

Repeat
      If Allowed(57) Then
          ; do something in the game
     Endif
     ; sample: allow SPACE after 10 seconds:
     If Time<Millisecs()
           CancelKey(57)=FALSE
     Endif
Until KeyHit(1)


Function Allowed%(KeyNr%)
     KeyH%=KeyHit(KeyNr)
     If CancelKey(KeyNr)=TRUE then Return 0

     Return KeyH
End Function