2012-08-10 127 views
57

为了理解搅拌机的python游戏脚本,我目前尝试使用从this link的FPSController结构来构建一个场景,其中人们可以在球体周围走动。重力和FPSController取向我试图构建蟒控制器,目前看起来像这样:搅拌机:绕着球体行走

def main(): 
    print("Started") 

    controller = bge.logic.getCurrentController() 
    me = controller.owner 

    distance, loc, glob = me.getVectTo((0,0,0)) 

    grav = controller.actuators['Gravity'] 

    strength = me['Gravity'] 
    force = strength*(distance*distance)*glob 

    grav.force = force 

    try: 
     rot = Vector((0,0,-1)).rotation_difference(glob).to_matrix() 
    except Exception as E: 
     print(E) 
     rot = (0,0,0) 

    rotZ = me.orientation 
    me.orientation = rot*rotZ 

    controller.activate(grav) 

main() 

这大致工作到任何角度变为超过180度,并且看起来不连续的即可。我认为这是来自rotation_difference是不连续的 - blender documentation on Math Types & Utilities没有说什么,我还没有足够的关于四元数表示还没有看到,如果连续的地图是可能的 - 我想有一个更优雅的方式来实现本地Z方向持续依赖于鼠标,而局部X和Y方向依赖于某个给定的矢量,但是如何?

+15

3D空间中的旋转可能非常困难。在我看来,把时间放在理解四元数是最简单的,然后使用它们。 – fluffels 2012-10-19 13:03:55

+0

如果使用欧拉角(而不是四元数),您可能会遇到的问题之一是万向节锁(http://en.wikipedia.org/wiki/Gimbal_lock),这可能会导致相当多的问题 – decden 2013-04-06 19:53:11

+0

是否容易尝试此操作当你安装了Blender时出来? (不是Blender专家) – Gerard 2013-06-10 19:50:18

回答

0

有一个allign功能。如果游戏对象被称为自己,它应该类似own.alignAxisToVect(vector, 2, 1),其中2是Z轴的索引(x = 0,y = 1,z = 2),1是对齐速度(在0和1之间)