1

我刚开始使用 Blender 和 Python,我一直在尝试使用带有 Python 2.5.1 的搅拌机游戏引擎来访问立方体的旋转属性

我在我的场景中将这个 python 脚本附加到一个立方体:

cont = GameLogic.getCurrentController()
own = cont.owner

print own.RotX, own.RotY, own.RotZ

我得到的只是这个错误:
来自控制器“cont#CONTR#1”的 Python 脚本错误:回溯(最后一次调用):文件“starter”,第 4 行,在 AttributeError:“KX_GameObject”对象没有属性“RotX”

谁能告诉我如何访问旋转属性?感觉我快疯了!

谢谢,
威尔

4

2 回答 2

3

您可以使用属性 localOrientation,这似乎是在游戏引擎中访问旋转的唯一方法,而无需使用不允许打印当前旋转的运动执行器。

localOrientation 由列表列表或 3x3 矩阵组成。矩阵的每一行都是相应轴将指向的点。对于默认多维数据集:

import GameLogic
cont = GameLogic.getCurrentController()
own = cont.owner

print(own.localOrientation)

将产生 Matrix((1.0, 0.0, 0.0), (0.0, 1.0, 0.0), (0.0, 0.0, 1.0)) 因为对象的 x 轴指向点 (1, 0, 0),y 点到 (0, 1, 0),z 到 (0, 0, 1)

希望这可以帮助!

编辑:只是玩弄这个,我想说,如果事情表现得很奇怪,请记住这是面向本地的。如果事情不正常,请检查对象的本地位置!我只是感到非常困惑,因为我没有意识到我的对象的本地位置是 (0,0,0),即使它看起来像是在 (9,-10,0)

于 2011-03-25T23:14:50.437 回答
1

据我所知,您可以通过 getDRot() 函数访问旋转属性,其中 getDRot()[0] = rotX,getDRot()[1] = rotY,getDRot()[2] = rotZ。但我不确定您是否可以在所有者对象上调用它。从我很久以前写的一些片段中,我在执行器上调用了这个函数。所以你的球必须有一个执行器,然后你可以

import GameLogic
cont = GameLogic.getCurrentController()
moveAct = cont.getActuator("move") # or the name you gave it
rotX = moveAct.getDRot()[0]
#etc
于 2011-03-25T14:08:23.567 回答