Автор Тема: Можно ли через переменную назначить объект?  (Прочитано 8597 раз)

Оффлайн Novichok

  • Житель
Всем привет.
Фрагмент:
Код
scene = bge.logic.getCurrentScene()  
controller = bge.logic.getCurrentController()
objList = scene.objects
abc = objList["Cab"]
 
как я понимаю, назначает объект "Cab" для переменной abc.
Вопрос в следующем, можно ли для переменной abc назначить объект из списка objList через переменную, которая ранее получает имя объекта?
Например:
obj = Cab
и, как-то
abc = objList... obj

Оффлайн Николай Николаев

  • Житель
  • emerge --keep-going
Re: Можно ли через переменную назначить объект?
« Ответ #1 : 06 Октябрь 2018, 07:01:40 »
>> obj = Cab
>> и, как-то
>> abc = objList... obj

Код
obj = "Cab"
abc = objList[obj]

Оффлайн Novichok

  • Житель
Re: Можно ли через переменную назначить объект?
« Ответ #2 : 07 Октябрь 2018, 08:08:15 »

Код
obj = "Cab"
abc = objList[obj]
Николай, что-то идёт не так.
Подскажи, как проверить что находится в переменной abc - объект или название объекта.
У меня несколько скриптов и я подозреваю что в каком-то теряю объект.

Оффлайн Novichok

  • Житель
Re: Можно ли через переменную назначить объект?
« Ответ #3 : 07 Октябрь 2018, 11:32:58 »
Наверно правильнее будет сформулировать чего я добиваюсь.
Главное окно, это вид через лобовое окно авто.
Дополнительное окно в окне, в котором должны отображаться виды других камер - слева, справа, сверху, сзади и т.д. которые переключаются клавишами 1, 2, 3, и т.д.
Изначально установленный вид работает нормально, однако при переключении камер Питон выдаёт ошибку:
Код
!!!!!!!!!!! View
11 nazvCamObz =  CameraObzora
14 camObz =  CameraObzora
24 camObz =  CameraObzora
33 View W =  3.07  H =  2.07
34 int(camObz[Left] * W) =  227  int(camObz[Bottom] * H) =  153
35 int(camObz[Right] * W) =  303  int(camObz[Top] * H) =  204
!!!!!!!!!!! PosCarsCameras
11 nazvCamObz =  CameraObzora
14 camObz =  CameraObzora
24 camObz =  CameraObzora
!!!!!!!!!!! Switching Camer
19 camObz =  CameraLeft    # смена камеры "CameraObzora" на камеру "CameraLeft"

!!!!!!!!!!! View
11 nazvCamObz =  CameraLeft
20 camObz =  CameraLeft
24 camObz =  CameraLeft
Python script error - object 'Car', controller 'Python.005':
Traceback (most recent call last):
  File "View", line 32, in <module>
KeyError: 'value = gameOb[key]: KX_GameObject, key "Left" does not exist'   #  Питон вредничает и не признаёт CameraLeft объектом, по крайней мере я так понимаю.
Если нужно, то без проблем предоставлю файл - просто пытаюсь сберечь твоё время.

Оффлайн Николай Николаев

  • Житель
  • emerge --keep-going
Re: Можно ли через переменную назначить объект?
« Ответ #4 : 07 Октябрь 2018, 14:12:29 »
... выкладывайте код, пожалуйста ...

Оффлайн Novichok

  • Житель
Re: Можно ли через переменную назначить объект?
« Ответ #5 : 07 Октябрь 2018, 15:59:43 »
... выкладывайте код, пожалуйста ...
Николай, извините, но думаю, что, проще с файлом будет разобраться - что-то я накуралесил видно не в скриптах.
Сам не вижу где.
https://my-files.ru/ska0j1

Оффлайн Николай Николаев

  • Житель
  • emerge --keep-going
Re: Можно ли через переменную назначить объект?
« Ответ #6 : 09 Октябрь 2018, 06:59:18 »
>> Сам не вижу где.
... смотрите код с комментариями "если название камеры ...., то ...." ...
... попробуйте сначала добиться, чтобы эта логика отрабатывала - насколько понимаю, в коде сравнивается объект со строкой, а судя по комментарию нужно сравнивать строку со строкой - возьмите имя объекта через .name и уже сравнивайте это имя с требуемой строкой ...

Оффлайн Novichok

  • Житель
Re: Можно ли через переменную назначить объект?
« Ответ #7 : 09 Октябрь 2018, 10:48:52 »
>> Сам не вижу где.
... смотрите код с комментариями "если название камеры ...., то ...." ...
... попробуйте сначала добиться, чтобы эта логика отрабатывала - насколько понимаю, в коде сравнивается объект со строкой, а судя по комментарию нужно сравнивать строку со строкой - возьмите имя объекта через .name и уже сравнивайте это имя с требуемой строкой ...
Я нашёл причину. В скрипте Start я прописываю параметры для камеры CameraObzora, вот они у меня на ней и есть, а другие камеры-то не прописаны.
Прописал:
Код
param = camObz["Left"]                      # получить значение переменной param из объекта свойства obj["Left"]
    if param == 0:                              # если param = 0, то ...
        camObz["Left"] = int((Wmax-2)/W*0.75)   # присвоить свойству camObz["Left"] целочисленное значение int((Wmax-2)/W*0.75)
        camLeft["Left"] = camObz["Left"]     # присвоить камере CameraLeft то же значение
        camRight["Left"] = camObz["Left"]     # присвоить камере CameraRight то же значение
        cam["Left"] = camObz["Left"]     # присвоить камере Camera то же значение
        print("36 camObz[Left] = ", camObz["Left"], " camLeft[Left] = ", camLeft["Left"], " camRight[Left] = ", camRight["Left"], " cam[Left] = ", cam["Left"])
Точно так же и остальные параметры окна для правой, верхней, нижней границ окна и фокуса - заработало. Всё же ошибка была в скрипте.
Николай, тут появилась проблема другого плана - переключение камер ненадёжно работает. Сенсор клавиши срабатывает и включает скрипт, а в скрипте все сенсоры почему-то пишутся как sen1... sen2... sen3... sen4.positive = false. На вскидку, в чём причина может быть, ведь false не должно скрипт запускать?
Цитировать
!!!!!!!!!!! Switching Camer
11 sen1 =  False  sen2 =  False  sen3 =  False  sen4 =  False

Оффлайн Николай Николаев

  • Житель
  • emerge --keep-going
Re: Можно ли через переменную назначить объект?
« Ответ #8 : 10 Октябрь 2018, 02:39:14 »
>> 11 sen1 =  False  sen2 =  False  sen3 =  False  sen4 =  False
... выложите файл с последними изменениями ...
... попробуйте получить нужную информацию через контроллер ...
Код: python
# To get the controller thats running this python script:
cont = bge.logic.getCurrentController() # bge.logic is automatically imported

# To get the game object this controller is on:
obj = cont.owner

https://docs.blender.org/api/blender_python_api_2_78_release/bge.logic.html?highlight=getCurrentController

Оффлайн Novichok

  • Житель
Re: Можно ли через переменную назначить объект?
« Ответ #9 : 10 Октябрь 2018, 21:40:08 »
>> 11 sen1 =  False  sen2 =  False  sen3 =  False  sen4 =  False
... выложите файл с последними изменениями ...
... попробуйте получить нужную информацию через контроллер ...
Николай, вопрос снимаю - похоже это срабатывание на отпуск клавиши. Где-то мне попадалась подобная информация. Посмотрел внимательнее и нашёл строку с True - видно при нажатии клавиши, а приведённая мною строка следует позже, скорее всего как результат отпускания клавиши, отсюда и False.
Файл направляю вам в ссылке: https://my-files.ru/rp3czy
Сейчас у меня проблема со скриптом View - после переключения камер, отображение в дополнительном окне становится неполным хоть запись в системной консоли, божится-клянётся что изображение должно быть полным.

Оффлайн Novichok

  • Житель
Re: Можно ли через переменную назначить объект?
« Ответ #10 : 11 Октябрь 2018, 16:07:50 »
Николай, в скрипте Start строку
19 car["cameraObz"] = camObz
поменял на строку
19 car["cameraObz"] = camLeft
В результате дополнительное окно стало полосой (см. рисунок слева), но консоль сообщает
Код
29 camObz =  CameraLeft
36 int(camObz[Left] * W) =  842  int(camObz[Bottom] * H) =  474
37 int(camObz[Right] * W) =  1127  int(camObz[Top] * H) =  634
С камерой camObz она так же пишет
Код
29 camObz =  CameraObzora
36 int(camObz[Left] * W) =  842  int(camObz[Bottom] * H) =  474
37 int(camObz[Right] * W) =  1127  int(camObz[Top] * H) =  634
однако картинку рисует иную (рисунок справа)
Какие у вас на этот счёт есть соображения, как это вообще может быть?

И, ещё странность, CameraObzora позволяет клавишами со стрелками с клавишами "+" и "-"  на цифровой клавиатуре изменять размеры дополнительного окна, однако если использовать камеры для дополнительного окна "Camera", "camLeft", "camRight" эта способность пропадает - размеры не меняются. Чудно, значения в свойствах меняются, а изображение остаётся неизменным.
« Последнее редактирование: 11 Октябрь 2018, 16:56:56 от Novichok »

Оффлайн Samovar

  • Житель
Re: Можно ли через переменную назначить объект?
« Ответ #11 : 12 Октябрь 2018, 14:36:19 »
Blender для начинающих/Python

Там не всё по BGE, конечно, но достаточно, чтобы разбираться в документации и примерах BGE тут:  http://bgepython.tutorialsforblender3d.com

Оффлайн Novichok

  • Житель
Re: Можно ли через переменную назначить объект?
« Ответ #12 : 12 Октябрь 2018, 15:29:53 »
Blender для начинающих/Python

Там не всё по BGE, конечно, но достаточно, чтобы разбираться в документации и примерах BGE тут:  http://bgepython.tutorialsforblender3d.com
Samovar, спасибо за ссылки - информация не может быть лишней - постараюсь ознакомиться с ней.

В плане моего общения с Николаем Николаевым по данной теме. Я дал ссылку на мой файл https://my-files.ru/rp3czy
В последнем сообщении я задал ему вопросы. Можете что-либо на них ответить?
И, ещё, сомневаюсь в своём "железе" (возможно причина в нём), а потому сможете ли подтвердить, что и у вас дополнительное окно выводится "полосой", если заменить 19-ю строку в скрипте Start на:
19 car["cameraObz"] = camLeft, camRight или cam?

Оффлайн Samovar

  • Житель
Re: Можно ли через переменную назначить объект?
« Ответ #13 : 12 Октябрь 2018, 16:08:27 »
У меня так же полосой выводится... Но если сделать левую и правую камеры перспективными, а не ортогональными, то всё нормально... а прозрачное окно потому, что фон прозрачен... также можно покрутить пустышки левой и правой камер по оси Х... такие соображения

Оффлайн Novichok

  • Житель
Re: Можно ли через переменную назначить объект?
« Ответ #14 : 12 Октябрь 2018, 18:43:39 »
У меня так же полосой выводится... Но если сделать левую и правую камеры перспективными, а не ортогональными, то всё нормально...
Пробовал. Сейчас повторно сделал. На рисунке (я сильно увеличил дополнительное окно) результат смены вида в дополнительном окне - верхняя половина от вида сверху с авто осталась, а нижняя половина, похоже вид из камеры от водителя с капотом авто, которого здесь вообще не может быть. Samovar, честно говоря я никак не могу разобраться, толи я накуролесил, толи Blender куролесит. Хочется думать что я что-то не учёл, и, надо, только найти мою ошибку.
Цитировать
а прозрачное окно потому, что фон прозрачен...
Извините, не понял это о чём.
Цитировать
также можно покрутить пустышки левой и правой камер по оси Х... такие соображения
Ну, это для уточнения кадра? Мне бы как-то вывести для начала в дополнительное окно виды сверху, слева, справа, преследования, а у ж потом можно будет эстетикой заняться.
Странно то, что переключение камер (хоть такое) происходит только с видом сверху - его хоть на что-то изменить можно, а вот дальше ни сменить камеру, ни изменить параметры дополнительного окна уже не получается.
Кстати, в консоли пишутся нормальные параметры окна хоть и выводится "полоса"... Забрёл в "лес непоняток", хоть и сам его создал, и блуждаю в нём.

 


Яметрика

* По форуму

* Рекламный блок

* Последние вложения

1 (1).png
Скачано: 65
Автор: LEXA ANЭGROWND
blender.png
Скачано: 75
Автор: ipv2007
4.png
Скачано: 97
Автор: hiroyukiss
2.png
Скачано: 120
Автор: hiroyukiss

Скачано: 110
Автор: Dilifa12