2012-05-16 2 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 series): «Gamelogic» заменяется на «bge.logic»; Я не уверен в «EmptyProp = obj», я думаю, это просто «emptyOb ['somename'] = obj", но я не уверен в этом. – GGolem

0

Я полагаю, вы можете использовать SCA_MouseSensor датчик и его свойство hitObject получить последний объект мышь была закончена. Он возвращает None или объект KX_GameObject. Когда вы его получите, вы можете использовать его свойство name, чтобы получить имя (или просто получить доступ к другим свойствам объекта).

Справочные ссылки:

Я не проверял это, но я полагаю, он должен работать, когда используется в Blender Game Engine. Информация, которую я нашел, относится к Blender 2.59, поэтому убедитесь, что использование использует соответствующую версию приложения.

Смежные вопросы