π导航  

【首页】

Blender游戏约束运动:线性运动


【2019-10-10】 【blender】


6DOF指6个方向自由度,即沿三个方向的平动以及绕三个轴的转动。

建立两个立方体,分别用红色和绿色标识。

浏览图片

红色立方体命名为Cube_Red,物理属性为rigid body,即刚性物体。

绿色立方体命名为Cube_Green,物理属性为static,表示静止物。

在logic editor中建立如下逻辑关系

浏览图片

运行游戏后得到如下结果:

浏览图片

即,红色立方体将向右移动一定的位移。

游戏中使用的py程序如下:


import bge

# 得到当前场景
scene = bge.logic.getCurrentScene()

# 得到场景中的对象列表
objList = scene.objects

# obj1=名为OBCube_Green的对象(绿色)
obj1 = objList["Cube_Green"]

# obj2=名为OBCube_Red的对象(红色)
obj2 = objList["Cube_Red"]

# 使用6DOF约束
constraintType = bge.constraints.GENERIC_6DOF_CONSTRAINT

0 = No Constraint (没有约束)
1 = bge.constraints.POINTTOPOINT_CONSTRAINT(点对点约束)
2 = bge.constraints.LINEHINGE_CONSTRAINT(线铰链约束)
3 = bge.constraints.ANGULAR_CONSTRAINT(角度约束)
4 = bge.constraints.CONETWIST_CONSTRAINT(锥体扭转约束)
11 = bge.constraints.VEHICLE_CONSTRAINT(车辆约束)
12 = bge.constraints.GENERIC_6DOF_CONSTRAINT (6 自由度约束)

# 得到obj1 的物理id
obj1_ID = obj1.getPhysicsId()

# 得到obj2的物理id
obj2_ID = obj2.getPhysicsId()

# 使用obj1的中心作为轴心点
pivotPos_X =  0.0
pivotPos_Y =  0.0
pivotPos_Z =  0.0

# 创建6DOF约束
cube_6DOF = bge.constraints.createConstraint( obj1_ID, obj2_ID,
                 constraintType,
                 pivotPos_X, pivotPos_Y, pivotPos_Z)

# 设置轴点沿x移动的量
cube_6DOF.setParam(0, 0.0, 10.0)

# xyz三个方向不旋转
cube_6DOF.setParam(3, 0.0, 0.0)
cube_6DOF.setParam(4, 0.0, 0.0)
cube_6DOF.setParam(5, 0.0, 0.0)

#创建x方向的移动
cube_6DOF.setParam(6, -3.0, 100)


这里我们使用了setParam这个方法,其参数说明如下。

setParam(axis, min, max)
        沿 x, y 和 z轴运动。
  物体2使用物体1的轴运动。
axis: 整数类型,六个自由度的轴向
      0 = x axis
      1 = y axis
      2 = z axis
      3 = x axis rotation
      4 = y axis rotation
      5 = z axis rotation
min:浮点数
      最小距离 (0.0 表示物体2的中心)
max:浮点数
      最大距离 (0.0 表示物体2的中心)

setParam(axis, speed, acceleration)
      旋转运动
      物体2使用物体1的轴运动。
axis: 整数类型
      6 = x axis
      7 = y axis
      8 = z axis
      9 = x axis rotation
      10 = y axis rotation
      11 = z axis rotation
speed:浮点数
      运动速度 
acceleration:浮点数
      加速度




                            

copyright©2018-2019 gotopie.com