Mouselook and Runtime Problem in 2.49b

Hello,

I encountered two problems during my small game developement. One is with a mouselook script, that is a self-updated version of a 2.45 script:

###########################  Logic Bricks

# Get controller
controller = GameLogic.getCurrentController()
owner = controller.owner

# Get sensor named Mouse
mouse = controller.sensors["Mouse"]
   
# Get the actuators
rotLeftRight = controller.actuators["LeftRight"]
rotUpDown = controller.actuators["UpDown"]  


############################## Need the size of the game window

import Rasterizer

width = Rasterizer.getWindowWidth()
height = Rasterizer.getWindowHeight()
     

############################### Get the mouse movement

def mouseMove():
    
    # distance moved from screen center       
    x = width/2 - mouse.position[0] 
    y = height/2 - mouse.position[1]
   
    # intialize mouse so it doesn't jerk first time
    if hasattr(GameLogic, 'init') == False:
        x = 0
        y = 0
        GameLogic.init = True
   
    return (x, y)

pos = mouseMove()

   
######## Figure out how much to rotate camera and player ########

# Mouse sensitivity
sensitivity = 0.0020

# Amount, direction and sensitivity
leftRight = pos[0] * sensitivity
upDown = pos[1] * sensitivity

# invert upDown
upDown = upDown


######### Use actuators to rotate camera and player #############

# Set the rotation values
owner.applyRotation([ upDown, 0.0, 0.0 ], 1)
owner.applyRotation([ 0.0, 0.0, leftRight ], 0)

# Use them
controller.activate(rotLeftRight)
controller.activate(rotUpDown)


############# Center mouse pointer in game window ###############

# Center mouse in game window
Rasterizer.setMousePosition(width/2, height/2)

GameLogic.setLogicTicRate(60)
GameLogic.setPhysicsTicRate(60)

The problem is that when the camera turns big angles - especially very sudden - it rotates around the local y axis too, but I could not find in the script how this is possible.

The second problem:
I exported the game as an .exe, all the dlls are in the same directory, still when trying to run it, I get a

The handle (5630) cannot be found in the DLL (avcodec-52.dll).

message. Any fixes for that? Thanks!

Here is a mouselook.py that I have had no problems with, however i dont know anything about your second problem -cheers;) sorry for the large post i couldn’t figure out how to get it how you posted it.:o
######################################################

MouseLook.py Blender 2.49

Tutorial for using MouseLook.py can be found at

www.tutorialsforblender3d.com

Released under the Creative Commons Attribution 3.0 Unported License.

If you use this code, please include this information header.

######################################################

define main program

def main():

# set default values
Sensitivity =  0.0005
Invert = 1
Capped = False

# import Rasterizer
import Rasterizer

# get controller
controller = GameLogic.getCurrentController()

# get the object this script is attached to
obj = controller.owner

# get the size of the game screen
gameScreen = gameWindow(Rasterizer)

# get mouse movement
move = mouseMove(gameScreen, controller, obj)

# change mouse sensitivity?
sensitivity =  mouseSen(Sensitivity, obj)

# invert mouse pitch?
invert = mousePitch(Invert, obj)

# upDown mouse capped?
capped = mouseCap(Capped, move, invert, obj)

# use mouse look
useMouseLook(controller, capped, move, invert, sensitivity)
    
# Center mouse in game window
centerCursor(controller, gameScreen, Rasterizer)

#####################################################

define game window

def gameWindow(Rasterizer):

# get width and height of game window
width = Rasterizer.getWindowWidth()
height = Rasterizer.getWindowHeight()

return (width, height)

#######################################################

define mouse movement function

def mouseMove(gameScreen, controller, obj):

# Get sensor named MouseLook
mouse = controller.sensors["MouseLook"]

# extract width and height from gameScreen
width = gameScreen[0]
height = gameScreen[1]

# distance moved from screen center
x = width/2 - mouse.position[0]
y = height/2 - mouse.position[1]

# initialize mouse so it doesn't jerk first time
if obj.has_key('mouseInit') == False:
    obj['mouseInit'] = True
    x = 0
    y = 0

#########    stops drifting on mac osx
   
# if sensor is deactivated don't move
if not mouse.positive:
    x = 0
    y = 0

#########  -- mac fix contributed by Pelle Johnsen
                
# return mouse movement
return (x, y)

######################################################

define Mouse Sensitivity

def mouseSen(sensitivity, obj):

# check so see if property named Adjust was added
if obj.has_key('Adjust') == True:
    
    # Don't want Negative values
    if obj['Adjust'] < 0.0:
        obj['Adjust'] = 0.0
    
    # adjust the sensitivity
    sensitivity = obj['Adjust'] * sensitivity

# return sensitivity
return sensitivity

#########################################################

define Invert mouse pitch

def mousePitch(invert, obj):

# check to see if property named Invert was added    
if obj.has_key('Invert') == True:
        
    # pitch to be inverted?
    if obj['Invert'] == True:
        invert = -1
    else:
        invert = 1
        
# return mouse pitch
return invert

#####################################################

define Cap vertical mouselook

def mouseCap(capped, move, invert, obj):

# check to see if property named Cap was added
if obj.has_key('Cap') == True:            

    # import mathutils
    import Mathutils
    
    # limit cap to 0 - 180 degrees
    if obj['Cap'] > 180:
        obj['Cap'] = 180
    if obj['Cap'] < 0:
        obj['Cap'] = 0
    
    # get the orientation of the camera to world axis
    camOrient = obj.orientation
    
    # get camera Z axis vector
    camZ = [camOrient[0][2], camOrient[1][2], camOrient[2][2]]
    
    # create camera z axis vector 
    vec1 = Mathutils.Vector(camZ)
    
    # get camera parent
    camParent = obj.parent
    
    # get parent orientation to world axis
    parentOrient = camParent.orientation
    
    # get parent z axis vector
    parentZ = [parentOrient[0][2], parentOrient[1][2], parentOrient[2][2]]
    
    # create parent z axis vector
    vec2 = Mathutils.Vector(parentZ)
    
    # find angle between two
    angle = Mathutils.AngleBetweenVecs(vec1, vec2)
        
    # get amount to limit mouselook
    capAngle = obj['Cap']
            
    # get mouse up down movement
    moveY = move[1] * invert
        
    # check capped angle against against camera z-axis and mouse y movement
    if (angle > (90 + capAngle/2) and moveY > 0)   or (angle < (90 - capAngle/2) and moveY < 0)  == True:
        
        # no movement
        capped = True

# return capped
return capped

###############################################

define useMouseLook

def useMouseLook(controller, capped, move, invert, sensitivity):

# get up/down movement
if capped == True:
    upDown = 0
else:
    upDown = move[1] * sensitivity * invert 
    
# get left/right movement
leftRight = move[0] * sensitivity * invert 
    
# Get the actuators
act_LeftRight = controller.actuators["LeftRight"]
act_UpDown = controller.actuators["UpDown"]  

# set the values
act_LeftRight.dRot = [ 0.0, 0.0, leftRight]
act_LeftRight.useLocalDRot = False  

act_UpDown.dRot = [ upDown, 0.0, 0.0]
act_UpDown.useLocalDRot = True

# Use the actuators 
controller.activate(act_LeftRight)
controller.activate(act_UpDown) 

#############################################

define center mouse cursor

def centerCursor(controller, gameScreen, Rasterizer):

# extract width and height from gameScreen
width = gameScreen[0]
height = gameScreen[1]

# Get sensor named MouseLook
mouse = controller.sensors["MouseLook"]

# get cursor position
pos = mouse.position
    
# if cursor needs to be centered
if pos != [ width/2, height/2]:
    
    # Center mouse in game window
    Rasterizer.setMousePosition(width/2, height/2)
    
# already centered.  Turn off actuators
else:
    # Get the actuators
    act_LeftRight = controller.actuators["LeftRight"]
    act_UpDown = controller.actuators["UpDown"]  
    
    # turn off the actuators 
    controller.deactivate(act_LeftRight)
    controller.deactivate(act_UpDown) 

##############################################

Run program

main()

the mouselook.py has some additional settings like sensitivity and how to make it so you cant look down and all the way around. -sorry for the double post!