Post by n00b on Jun 1, 2019 9:19:39 GMT -6
Here is an example of a KeyPressed and KeyReleased Function. You can use this as a base for your own game framework.
mylib.bas
keyboard_example.bas
rcbasic_keyboard_test.zip (1.22 KB)
mylib.bas
Dim keyboard_key_state[512,3]
Dim H_Key_Base
H_Key_Base = HEXINT("40000039")
MAX_KEY_INDEX = HEXINT("4000011A")
Sub my_update()
Update
b = 0
For key_val = 0 To 127
b = key(key_val)
If b And (Not keyboard_key_state[key_val, 0]) Then
keyboard_key_state[key_val, 1] = True
keyboard_key_state[key_val, 2] = False
ElseIf b And keyboard_key_state[key_val, 0] Then
keyboard_key_state[key_val, 1] = False
keyboard_key_state[key_val, 2] = False
ElseIf (Not b) And keyboard_key_state[key_val, 0] Then
keyboard_key_state[key_val, 1] = False
keyboard_key_state[key_val, 2] = True
Else
keyboard_key_state[key_val, 1] = False
keyboard_key_state[key_val, 2] = False
End If
keyboard_key_state[key_val, 0] = b
Next
i = 128
For key_val = H_Key_Base To MAX_KEY_INDEX
b = key(key_val)
If b And (Not keyboard_key_state[i, 0]) Then
keyboard_key_state[i, 1] = True
keyboard_key_state[i, 2] = False
ElseIf b And keyboard_key_state[i, 0] Then
keyboard_key_state[i, 1] = False
keyboard_key_state[i, 2] = False
ElseIf (Not b) And keyboard_key_state[i, 0] Then
keyboard_key_state[i, 1] = False
keyboard_key_state[i, 2] = True
Else
keyboard_key_state[i, 1] = False
keyboard_key_state[i, 2] = False
End If
keyboard_key_state[i, 0] = b
i = i + 1
Next
End Sub
Function KeyPressed(k)
If k >= 128 Then
k = (k - H_Key_Base) + 128
End If
Return keyboard_key_state[k, 1]
End Function
Function KeyReleased(k)
If k >= 128 Then
k = (k - H_Key_Base) + 128
End If
Return keyboard_key_state[k, 2]
End Function
keyboard_example.bas
Include "mylib.bas"
windowopen(0, "test", windowpos_centered, windowpos_Centered, 640, 480, 0)
canvasopen(0, 640, 480, 0, 0, 640, 480, 0)
clearcanvas
While Not Key(K_ESCAPE)
Cls
If KeyPressed(K_RETURN) Then
SetColor(RGB(255,0,0))
Locate(10,10)
Prints("Return Pressed")
ElseIf KeyReleased(K_RETURN) Then
SetColor(RGB(0,255,0))
Locate(40,40)
PrintS("Return Released")
End If
my_update
Wend
rcbasic_keyboard_test.zip (1.22 KB)