BlenderCN论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1475|回复: 1

谁有这个视频教程里的脚本文本

[复制链接]
发表于 2013-4-9 12:34:40 | 显示全部楼层 |阅读模式
http://v.youku.com/v_show/id_XMzcyNTk5Mzky.html 分辨率太低看不清楚,哪位大神有这个的脚本文本或者高清的原视频,或者能实现类似功能的脚本?
 楼主| 发表于 2013-4-9 13:07:18 | 显示全部楼层
翻墙之后找到了!
分享一下:


######################################################
#
#   MouseLook.py        Blender 2.55
#
#   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
       
        # get controller
        controller = bge.logic.getCurrentController()
       
        # get the object this script is attached to
        obj = controller.owner
       
        # get the size of the game screen
        gameScreen = gameWindow()
       
        # 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)
       
#####################################################

# define game window
def gameWindow():
       
        # get width and height of game window
        width = bge.render.getWindowWidth()
        height = bge.render.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 not 'mouseInit' in obj:
                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 'Adjust' in obj:
               
                # 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 'Invert'in obj:
                       
                # 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 'Cap' in obj:                       
       
                # 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 parent
                camOrient = obj.localOrientation
               
                # get camera Z axis vector
                camZ = [camOrient[0][2], camOrient[1][2], camOrient[2][2]]
               
                # create a mathutils vector
                vec1 = mathutils.Vector(camZ)
               
                # get camera parent
                camParent = obj.parent
               
                # use Parent z axis
                parentZ = [ 0.0, 0.0, 1.0]
               
                # create a mathutils vector
                vec2 = mathutils.Vector(parentZ)

                # find angle in radians between two vectors
                rads = mathutils.Vector.angle(vec2, vec1)

                # convert to degrees (approximate)
                angle = rads * ( 180.00 / 3.14)

                # 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):
       
        # 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 != [int(width/2), int(height/2)]:
               
                # Center mouse in game window
                bge.render.setMousePosition(int(width/2), int(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)

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

#import GameLogic
import bge

# Run program
main()
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

Blender最新中文教学视频|Blender头条|小黑屋|手机版|Archiver|Blender中国 ( 蜀ICP备17002929号 )360网站安全检测平台

GMT+8, 2019-9-22 17:00 , Processed in 0.028630 second(s), 17 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表