Blender is a little weird on this issue:
Sensors fire 2 kinds of pulses, True and False. For example, a keyboard sensor, by default and when pressed, fires 1 True pulse when it is pressed and then 1 False pulse when it is released. If the little button in the top left (tooltip reads “Activate TRUE level triggering (pulse mode)”) then it sends a pulse every logic tic while the keyboard button is pressed (ie it fires more than 1 pulse).
Some actuators will only fire when they receive “True” pulses. The Property actuator is an example of this… 1 true pulse with an actuator that increments a property by 1 will only increment that property by 1. If you sent it multiple pulses, it would increment by 1 for each pulse.
However, some actuators, like the motion actuator, will activate when it gets a True pulse and then continue to be active UNTIL it gets a False pulse. It doesn’t matter if there aren’t any True pulses getting through, if it hasn’t gotten a False pulse then it keeps going.
The python command “GameLogic.addActiveActuator(dir, 1)” basically sends a True pulse to the motion actuator. However, there’s nothing in the script to give a False pulse to the actuator, so it keeps on going.
One way to handle this would be to do a check to see if none of your keyboard sensors are active, and if they’re not, use GameLogic.addActiveActuator(dir, 0). 0 will send a False pulse. However, it’s much easier to just set the motion actuator to do nothing.
Here’s the code as I would recommend it:
cont = GameLogic.getCurrentController()
own = cont.getOwner()
dir = cont.getActuator("Move")
fwd = cont.getSensor("Forward")
bck = cont.getSensor("Back")
lft = cont.getSensor("Left")
rht = cont.getSensor("Right")
if own.walk == 1:
F = 0
B = 0
R = 0
L = 0
if fwd.isPositive():
F = .4
if bck.isPositive():
B = -.4
if lft.isPositive():
L = -.4
if rht.isPositive():
R = .4
dir.setDLoc(L+R, F+B, 0.0, 1)
GameLogic.addActiveActuator(dir, 1)
Note: If you copy and paste this code, make sure you change the spaces into the appropriate tabs.
This also will allow you to move in more than 1 direction at once. You can see that when none of the keys are pressed, F B L and R are all 0. Even if none of the keys are being pressed, the motion actuator’s values are being set.
Hope that helps!
-Sam