【问题标题】:Problems getting object names获取对象名称的问题
【发布时间】:2012-05-24 00:57:58
【问题描述】:

我有一个带有几个对象的搅拌机场景,当鼠标悬停在其中一个上时,我会得到对象名称,设置一个 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

【问题讨论】:

  • 我们是否可以从搅拌机标签中假设这适用于 3D?您是否使用特定的窗口框架? (如果已经回答,请原谅我对搅拌机功能的了解不足)。
  • 对于 3D,执行此操作的典型方法是将窗口坐标系上的鼠标位置转换为与相机位置的角度(取决于您的透视矩阵是如何定义的),然后投影射线到现场。它与之相交的第一个对象是选定的对象。

标签: python game-engine blender


【解决方案1】:

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

参考链接:

我还没有对此进行测试,但我想它在 Blender 游戏引擎中使用时应该可以工作。我找到的信息是指 Blender 2.59,因此请确保使用的是应用程序的适当版本。

【讨论】:

    【解决方案2】:

    为了对其他人有用,我回答我自己的问题。我所做的是为场景中的每个对象设置一个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
    

    【讨论】:

    • 为了现实(Blender 2.6&2.7系列):“Gamelogic”替换为“bge.logic”;我不确定 "EmptyProp=obj" 我猜它只是 "emptyOb['somename'] = obj" 但我不确定。
    猜你喜欢
    • 2021-08-27
    • 1970-01-01
    • 2022-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-24
    • 2010-12-05
    • 2016-09-03
    相关资源
    最近更新 更多