First of all - the script doesn’t know what ‘events’ is inless you do:
import events
And you don’t need a keyboard sensor. Just delete that and put an always sensor attached to it with it’s pulse on ‘always’.
define you’re up uparrowkey as:
UPARROWKEY = logic.keyboard.events[events.UPARROWKEY]
Now keys are either pressed, held, or let go.
This is either when UPARROWKEY = 1, is just pressed, UPARROWKEY = 2, is held, and finally UPARROWKEY = 3 is let go.
But hey - why go through all this when I can just share with you my script - and you can make it what you want!
import bge
from bge import logic
from bge import events
cont = logic.getCurrentController()
obj = cont.owner
collision = cont.sensors["Collision"]
key = logic.keyboard.events
WKEY = key[events.WKEY]
AKEY = key[events.AKEY]
SKEY = key[events.SKEY]
DKEY = key[events.DKEY]
SPACEKEY = key[events.SPACEKEY]
SHIFTKEY = key[events.LEFTSHIFTKEY]
yMove = 0.0
xMove = 0.0
xForce = 0.0
yForce = 0.0
if AKEY == 2:
xMove = -0.1
xForce = -300
if SHIFTKEY == 2:
xMove = -0.05
xForce = -150
if DKEY == 2:
xMove = 0.1
xForce = 300
if SHIFTKEY == 2:
xMove = 0.05
xForce = 150
if WKEY == 2:
yMove = 0.1
yForce = 300
if SHIFTKEY == 2:
yMove = 0.05
yForce = 150
if SKEY == 2:
yMove = -0.1
yForce = -300
if SHIFTKEY == 2:
yMove = -0.05
yForce = -150
obj.applyMovement([xMove, yMove, 0.0], 1)
if SPACEKEY == 1 and collision.positive:
obj.applyForce([xForce, yForce, 300], 1)
yMove = 0.0
xMove = 0.0
xForce = 0.0
yForce = 0.0
WASD move around, space jump, left shift slow down…
All you need is a keyboard sensor set to ‘anykey’ and also put pulse mode on ‘always’, and have a collision sensor. No actuators needed.