2012-05-16 78 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,因此請確保使用正確的版本。