problem with parent actuator in BGE I wrote a module to rotate the camera with middle mouse button pressed, zoom in/out with wheel up/down and at last push the camera towards the direction of the mouse if the mouse is getting near to the end of the screen.

I want the camera to be a parent to the player that I have only when the rotation is taking place.So I activate/deactivate the parent actuator but a problem or an error occurs.

While the camera moves as the mouse suggests if the mouse reaches the end of the screen (That is before I press middle button once!), after I rotate the camera I can no longer "push" it under the same conditions.

I tried activating/deactivating the parent actuator or set the mode to remove itself.And all this time I was reading the physicsId of the camera to make sure it can move with linear velocity.All the readings were ok,and no errors popped so I do not know why the camera stops moving after I rotate it once.

Here is the blend file with the module inside it : test blend

and below is the script clean,without comments. Can anyone find what I am doing wrong?

import bge

bge.render.showMouse(True)

scene = bge.logic.getCurrentScene()

player = scene.objects["player"]

cont = bge.logic.getCurrentController()

wh_up = cont.sensors["wh_up"]
wh_down = cont.sensors["wh_down"]
wh_pressed = cont.sensors["wh_pressed"]

par_to_player = cont.actuators["par_to_player"]

cam = scene.active_camera

mousePos = bge.logic.mouse.position
if not wh_pressed.positive:
    par_to_player.mode = 2
    mX = max(0.0,min(1.0,mousePos[0]))
    mY = max(0.0,min(1.0,mousePos[1]))

if mX &lt; 0.05:
    cam.localLinearVelocity.x = -5*(2-mX)
    cam.localLinearVelocity.y = (0.5-mY)*5
elif mX &gt; 0.95:
    cam.localLinearVelocity.x = 5*(2+mX)
    cam.localLinearVelocity.y = (0.5-mY)*5

if mY &lt; 0.05:
    cam.localLinearVelocity.y = 5*(2+mY)
    cam.localLinearVelocity.x = -(0.5-mX)*5
elif mY &gt; 0.95:
    cam.localLinearVelocity.y = -5*(2-mY)
    cam.localLinearVelocity.x = -(0.5-mX)*5

cam.localLinearVelocity *= 0.9

if (wh_up.positive):
    cam.ortho_scale = cam.ortho_scale+5
if (wh_down.positive):
    cam.ortho_scale = cam.ortho_scale-5

if (wh_pressed.positive):
    bge.render.showMouse(False)
    cont.activate(par_to_player)
    par_to_player.mode = 1
    print (par_to_player.mode)
    mX_rot = max(0.0,min(1.0,mousePos[0]))
    if (mX_rot &lt; mX):
        player.applyRotation([0, 0, -0.01], 0)
    elif (mX_rot &gt; mX):
        player.applyRotation([0, 0, 0.01], 0)

print ("I reached the end of the module")
you are not unparenting the camera after rotation correctly , you have to set the mode to 2 and activate the actuator to take effect :

if not wh_pressed.positive:
    par_to_player.mode = 2
    cont.activate(par_to_player)


also you may need to kill the rotation after unparenting ( the camera gets thrown away after rotation )