Character Flying Away, Physics Glitch

I am having some weird physics problems that I can’t find an explanation for. The first is with my character climbing. If you climb a ladder from the bottom and then let go at any point, it works just fine and you fall to the ground. If you climb onto the ladder from the top though, when you let go the character flies away, and sometimes goes through the map.
The second problem, which I don’t know if it’s related or not, is that the way I have the camera setup, if you rotate so the camera would be looking through a wall, the camera will move the the face of the wall instead. The problem is that the camera seems to be behaving like a physical object, even though it is set to no collision, and pushing the character away from the wall if you try and move the camera between the character and the wall. This can also cause my character to fly away if he is standing right next to an objects corner, and then you move the camera so it goes between him and the object.
I am totally stumped by what would be causing these problems. Thanks for any help. Here is the example file.

Hi again.

I took a look at your file. I can’t say what’s wrong with the camera.

But I figured out what was wrong with the character flying off places (actually while typing the reply to you.) When you clicked the mouse to get on the ladder from above, you moved out from underneath the ground without turning off nzOn, which caused increasing acceleration. One tiny change to the climbing function and it works.


def climbing():
     if own['climbing'] == True and own['climbable'] == True and hit != None:
        own["nzOn"] = 0
        #print('check')
        own.suspendDynamics()
        if own['justGrabbed'] == True:
            pos = hit.getAxisVect([0.0,-1.0,0.0]) + Vector(hit.worldPosition)
            own.worldPosition = [pos[0],pos[1],own.worldPosition[2]]
            own.alignAxisToVect(hit.worldOrientation[1],1,1.0)
            own['justGrabbed'] = False
        if gl.keypressed[0] == True:
            own.applyMovement([0.0,0.0,0.1])
        elif gl.keypressed[1] == True and not nz.positive:
            own.applyMovement([0.0,0.0,-0.1])
        if gl.keypressed[2] == True:
            own.applyMovement([-0.1,0.0,0.0],1)
        elif gl.keypressed[3] == True:
            own.applyMovement([0.1,0.0,0.0],1)

My guess is that you spent several hours trying to fix this. I feel your pain. I have done this too.

Thank you, the solutions are always so simple. You’re right that i spent several hours trying to figure out what was going on. Now I just need to figure out what the problem with the camera is so I can go back to adding features instead of fixing bugs.

Bump. I still need some help figuring out the camera problem. Thank you guys.
EDIT: Nevermind, I figured it out. The ‘health’ meter I had parented to the camera, I forgot to change it from static to no collision.