In my key-down online demo I use two keyboard responses, one detecting key presses and the other key releases.
https://run.pavlovia.org/vespr/key-down/
Key Down code | try it | discussion thread
Compares the length of two keyboard components (one detecting key presses and the other key releases) to determine whether a key is currently pressed down.
if key_down.keys: # Online key_down.keys does not exit until a key has been pressed
if not key_release.keys:
keyDown = True
if key_down.keys[-1] == 'right':
thisOri += 1
elif key_down.keys[-1] == 'left':
thisOri -= 1
msg = 'key_down.keys ' + str(len(key_down.keys)) + '\nkey_release.keys 0\nfudgeFactor ' + str(fudgeFactor)
elif len(key_down.keys) > len(key_release.keys) + fudgeFactor:
keyDown = True
if key_down.keys[-1] == 'right':
thisOri += 1
elif key_down.keys[-1] == 'left':
thisOri -= 1
elif key_down.keys[-1] == 'space':
continueRoutine = False
# Sometime a key release gets missed
if len(key_down.keys) > len(key_release.keys) + 1 + fudgeFactor:
fudgeFactor += 1
msg = 'key_down.keys ' + str(len(key_down.keys)) + '\nkey_release.keys ' + str(len(key_release.keys)) + '\nfudgeFactor ' + str(fudgeFactor)
else:
keyDown = False
# Sometime a key press gets missed
if len(key_down.keys) < len(key_release.keys) + fudgeFactor:
fudgeFactor -= 1
msg = 'key_down.keys ' + str(len(key_down.keys)) + '\nkey_release.keys ' + str(len(key_release.keys)) + '\nfudgeFactor ' + str(fudgeFactor)
