2012-05-16 138 views
3

我有一个有几个对象的混合器场景,当鼠标悬停在其中一个对象上时,我将获取对象名称,设置empy对象的属性。 我现在只是场景对象的列表。我能做什么?获取对象名称的问题

import GameLogic 
cont=GameLogic.getCurrentController() 
obj=cont.getOwner() 
print obj 
objlist=GameLogic.getCurrentScene().getObjectList() 
print objlist 
sen=cont.getSensor('sensor') 
if sen.isPositive(): 
    print objlist[0] 
    PropName=.... #how to set this with the object name? 
    print PropName 
+0

我们是否从搅拌机标签中假设这与3D一起工作?你是否在使用窗口的特定框架? (如果已经回答了,请原谅我对搅拌机的能力缺乏了解)。 – Darthfett

+0

对于3D,执行此操作的典型方法是将窗口坐标系上的鼠标位置转换为相机位置的角度(取决于您的透视矩阵如何定义),然后将光线投影到场景上。与它相交的第一个对象是所选对象。 – Darthfett

回答

0

为了对别人有用,我回答了我自己的问题。我所做的是为场景中的每个对象设置一个mouse over传感器,并添加一个python脚本控制器,以便设置场景Empty object的属性。

import GameLogic 
import Rasterizer as r 
r.showMouse(1) #just in order to get the mouse visible within the game engine 
print 'SetProperty.py\n' 
cont=GameLogic.getCurrentController() 
obj=cont.getOwner() 
emptyOb = GameLogic.getCurrentScene().getObjectList()["OBEmpty"] 
emptyOb.EmptyProp=obj 
print 'object name, within emptyProp: ', emptyOb.EmptyProp 
+0

只是为了实际(Blender 2.6&2.7系列):“Gamelogic”被替换为“bge.logic”;我不确定“EmptyProp = obj”,我猜这只是“emptyOb ['somename'] = obj”但我不确定。 – GGolem

0

我想你可以使用SCA_MouseSensor传感器及其hitObject属性来获取最后一个对象鼠标滑过。它返回NoneKX_GameObject类型的对象。当你得到它时,你可以使用它的name属性来获取名称(或者只是访问对象的其他属性)。

参考链接:

我没有测试,但我想在搅拌机游戏引擎使用时,它应该工作。我发现的信息是指Blender 2.59,因此请确保使用正确的版本。