3d форум по Blender

Другое => Игровые 3d-движки (любые) => Игроделам - Blender Game Engine => Тема начата: Novichok от 04 Октябрь 2018, 20:08:38

Название: Можно ли через переменную назначить объект?
Отправлено: Novichok от 04 Октябрь 2018, 20:08:38
Всем привет.
Фрагмент:
Код
scene = bge.logic.getCurrentScene()  
controller = bge.logic.getCurrentController()
objList = scene.objects
abc = objList["Cab"]
 
как я понимаю, назначает объект "Cab" для переменной abc.
Вопрос в следующем, можно ли для переменной abc назначить объект из списка objList через переменную, которая ранее получает имя объекта?
Например:
obj = Cab
и, как-то
abc = objList... obj
Название: Re: Можно ли через переменную назначить объект?
Отправлено: Николай Николаев от 06 Октябрь 2018, 07:01:40
>> obj = Cab
>> и, как-то
>> abc = objList... obj

Код
obj = "Cab"
abc = objList[obj]
Название: Re: Можно ли через переменную назначить объект?
Отправлено: Novichok от 07 Октябрь 2018, 08:08:15

Код
obj = "Cab"
abc = objList[obj]
Николай, что-то идёт не так.
Подскажи, как проверить что находится в переменной abc - объект или название объекта.
У меня несколько скриптов и я подозреваю что в каком-то теряю объект.
Название: Re: Можно ли через переменную назначить объект?
Отправлено: Novichok от 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 объектом, по крайней мере я так понимаю.
Если нужно, то без проблем предоставлю файл - просто пытаюсь сберечь твоё время.
Название: Re: Можно ли через переменную назначить объект?
Отправлено: Николай Николаев от 07 Октябрь 2018, 14:12:29
... выкладывайте код, пожалуйста ...
Название: Re: Можно ли через переменную назначить объект?
Отправлено: Novichok от 07 Октябрь 2018, 15:59:43
... выкладывайте код, пожалуйста ...
Николай, извините, но думаю, что, проще с файлом будет разобраться - что-то я накуралесил видно не в скриптах.
Сам не вижу где.
https://my-files.ru/ska0j1
Название: Re: Можно ли через переменную назначить объект?
Отправлено: Николай Николаев от 09 Октябрь 2018, 06:59:18
>> Сам не вижу где.
... смотрите код с комментариями "если название камеры ...., то ...." ...
... попробуйте сначала добиться, чтобы эта логика отрабатывала - насколько понимаю, в коде сравнивается объект со строкой, а судя по комментарию нужно сравнивать строку со строкой - возьмите имя объекта через .name и уже сравнивайте это имя с требуемой строкой ...
Название: Re: Можно ли через переменную назначить объект?
Отправлено: Novichok от 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
Название: Re: Можно ли через переменную назначить объект?
Отправлено: Николай Николаев от 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
Название: Re: Можно ли через переменную назначить объект?
Отправлено: Novichok от 10 Октябрь 2018, 21:40:08
>> 11 sen1 =  False  sen2 =  False  sen3 =  False  sen4 =  False
... выложите файл с последними изменениями ...
... попробуйте получить нужную информацию через контроллер ...
Николай, вопрос снимаю - похоже это срабатывание на отпуск клавиши. Где-то мне попадалась подобная информация. Посмотрел внимательнее и нашёл строку с True - видно при нажатии клавиши, а приведённая мною строка следует позже, скорее всего как результат отпускания клавиши, отсюда и False.
Файл направляю вам в ссылке: https://my-files.ru/rp3czy
Сейчас у меня проблема со скриптом View - после переключения камер, отображение в дополнительном окне становится неполным хоть запись в системной консоли, божится-клянётся что изображение должно быть полным.
Название: Re: Можно ли через переменную назначить объект?
Отправлено: Novichok от 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" эта способность пропадает - размеры не меняются. Чудно, значения в свойствах меняются, а изображение остаётся неизменным.
Название: Re: Можно ли через переменную назначить объект?
Отправлено: Samovar от 12 Октябрь 2018, 14:36:19
(https://ru.wikibooks.org/wiki/Blender_для_начинающих/Python)Blender для начинающих/Python

Там не всё по BGE, конечно, но достаточно, чтобы разбираться в документации и примерах BGE тут:  http://bgepython.tutorialsforblender3d.com
Название: Re: Можно ли через переменную назначить объект?
Отправлено: Novichok от 12 Октябрь 2018, 15:29:53
(https://ru.wikibooks.org/wiki/Blender_для_начинающих/Python)Blender для начинающих/Python

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

В плане моего общения с Николаем Николаевым по данной теме. Я дал ссылку на мой файл https://my-files.ru/rp3czy
В последнем сообщении я задал ему вопросы. Можете что-либо на них ответить?
И, ещё, сомневаюсь в своём "железе" (возможно причина в нём), а потому сможете ли подтвердить, что и у вас дополнительное окно выводится "полосой", если заменить 19-ю строку в скрипте Start на:
19 car["cameraObz"] = camLeft, camRight или cam?
Название: Re: Можно ли через переменную назначить объект?
Отправлено: Samovar от 12 Октябрь 2018, 16:08:27
У меня так же полосой выводится... Но если сделать левую и правую камеры перспективными, а не ортогональными, то всё нормально... а прозрачное окно потому, что фон прозрачен... также можно покрутить пустышки левой и правой камер по оси Х... такие соображения
Название: Re: Можно ли через переменную назначить объект?
Отправлено: Novichok от 12 Октябрь 2018, 18:43:39
У меня так же полосой выводится... Но если сделать левую и правую камеры перспективными, а не ортогональными, то всё нормально...
Пробовал. Сейчас повторно сделал. На рисунке (я сильно увеличил дополнительное окно) результат смены вида в дополнительном окне - верхняя половина от вида сверху с авто осталась, а нижняя половина, похоже вид из камеры от водителя с капотом авто, которого здесь вообще не может быть. Samovar, честно говоря я никак не могу разобраться, толи я накуролесил, толи Blender куролесит. Хочется думать что я что-то не учёл, и, надо, только найти мою ошибку.
Цитировать
а прозрачное окно потому, что фон прозрачен...
Извините, не понял это о чём.
Цитировать
также можно покрутить пустышки левой и правой камер по оси Х... такие соображения
Ну, это для уточнения кадра? Мне бы как-то вывести для начала в дополнительное окно виды сверху, слева, справа, преследования, а у ж потом можно будет эстетикой заняться.
Странно то, что переключение камер (хоть такое) происходит только с видом сверху - его хоть на что-то изменить можно, а вот дальше ни сменить камеру, ни изменить параметры дополнительного окна уже не получается.
Кстати, в консоли пишутся нормальные параметры окна хоть и выводится "полоса"... Забрёл в "лес непоняток", хоть и сам его создал, и блуждаю в нём.
Название: Re: Можно ли через переменную назначить объект?
Отправлено: Novichok от 13 Октябрь 2018, 10:39:24
Уважаемые знатоки Blender, если этот ликбез (тема) ещё не совсем надоел, то я заметил свой промах (промах ли?).
Свойства "Left", "Bottom", "Right", "Top" определены мною только для камеры "CameraObzora".
Однако в скрипте "View" в консоли пишется:
Код
29 camObz =  Camera
35 W =  13.67  int(camObz[Bottom] * H) =  537
36 int(camObz[Left] * W) =  1011  int(camObz[Bottom] * H) =  537
37 int(camObz[Right] * W) =  1353  int(camObz[Top] * H) =  719
У объекта "Camera" ведь нет свойств, но Blender не сообщает об ошибке, а выдаёт данные объекта "CameraObzora". Как это может быть? Я, что, в 32-ой строке создаю эти свойства для объекта "Camera"?
Код
32 camObz.setViewport(int(camObz["Left"] * W), int(camObz["Bottom"] * H), int(camObz["Right"] * W), int(camObz["Top"] * H))
Название: Re: Можно ли через переменную назначить объект?
Отправлено: Николай Николаев от 14 Октябрь 2018, 19:44:17
... если происходит обращение к несуществующим элементам, то должно быть сообщение об ошибке ...
... проверьте значения элементов перед вызовом функции ...
Название: Re: Можно ли через переменную назначить объект?
Отправлено: Novichok от 15 Октябрь 2018, 10:22:59
... если происходит обращение к несуществующим элементам, то должно быть сообщение об ошибке ...
Николай, я в своём Ответе #9 от 10 Октябрь 2018, 21:40:08 дал ссылку на файл в котором игровые свойства назначены только для камеры "CameraObzora" - у других камер их нет. Вы вполне можете убедиться в этом.
Цитировать
... проверьте значения элементов перед вызовом функции ...
Извините, но я не понял подсказку.

На данный момент назначил игровые свойства для всех камер, однако чудеса продолжаются.
В скрипте Start в 19-ой строке поочерёдно назначаю камеры "CameraObzora", "CameraLeft", "CameraRight", "Camera" для дополнительного окна. Для всех окон в консоли выводится одна и та же запись параметров вывода окна:
Код
35 int(camObz[Left] * W) =  842  int(camObz[Bottom] * H) =  339
36 int(camObz[Right] * W) =  1127  int(camObz[Top] * H) =  615
Однако вывод на самом деле различен (см. рисунок).
Камера "CameraObzora" (изображение в левом верхнем углу) даёт правильный вид, а остальные три камеры почему-то уменьшают дополнительное окно, но сообщают о нормальном его выводе.
Николай, как думаете, что может быть причиной, то правильного вывода окна, то уменьшенного?
Название: Re: Можно ли через переменную назначить объект?
Отправлено: Николай Николаев от 15 Октябрь 2018, 19:54:02
>> в котором игровые свойства назначены только для камеры "CameraObzora" - у других камер их нет. Вы вполне можете убедиться в этом.
... предполагаю что где-то в этом коде ...
Код
import bge                                      # импортируем модуль BGE
from bge import logic                         # импортировать logic из модуля bge
import math                                     # импортируем модуль Math
from mathutils import Vector                    # из модуля mathutils импортировать Vector 

print("!!!!!!!!!!! Start ")
scene = bge.logic.getCurrentScene()             # получить текущую сцену
objList = scene.objects                         # получить список объектов
cont = bge.logic.getCurrentController()     # получить текущий контроллер
car = objList["Car"]                            # получить объект «Car»
camDriv = objList["Camera drivera"]          # получить камеру большого окна с названием Camera drivera

if car["PlayStart"] == False :                  # если старт игры ещё не был выполнен, то ...
    scene.active_camera = camDriv        # активировать как камеру большого окна Camera drivera
    camObz = objList["CameraObzora"]     # получить камеру CameraObzora для дополнительного окна из objList
    camLeft = objList["CameraLeft"]         # получить камеру CameraLeft для дополнительного окна
    camRight = objList["CameraRight"]     # получить камеру CameraRight для дополнительного окна
    cam = objList["Camera"]                 # получить камеру  преследования Camera для дополнительного окна
    car["cameraObz"] = camObz                   # сохранить в свойство cameraObz значение camObz
    print("PlayStart == False camObz = ", camObz)
    logic.globalDict['Time'] = 0                # получить в глобальную переменную Time значение 0
    logic.globalDict['StartTime'] = 0           # запомнить время старта
    logic.globalDict['StPos'] = Vector((0,0,0)) # запомнить стартовую позицию авто
    logic.globalDict['StOr'] = Vector((0,0,0))  # запомнить стартовую ориентацию авто
    logic.globalDict['VecCar'] = Vector((0,0,1))# получить в глобальную переменную вектора vecCar значение 0,0,1
    W = bge.render.getWindowWidth() / 100     # получить Ширину окна
    H = bge.render.getWindowHeight() / 100     # получить Высоту окна
    Wmax = bge.render.getWindowWidth()         # получить максимальную Ширину окна
    Hmax = bge.render.getWindowHeight()         # получить максимальную Высоту окна
    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"])
    param = camObz["Right"]                     # получить значение переменной param из объекта свойства camObz["Right"]
    if param == 0:                              # если param = 0, то ...
        camObz["Right"] = int((Wmax-2)/W)       # присвоить свойству camObz["Right"] целочисленное значение int((Wmax-2)/W)
        camLeft["Right"] = camObz["Right"] # присвоить камере CameraLeft то же значение
        camRight["Right"] = camObz["Right"] # присвоить камере CameraRight то же значение
        cam["Right"] = camObz["Right"]     # присвоить камере Camera то же значение
        print("43 camObz[Right] = ", camObz["Right"], " camLeft[Right] = ", camLeft["Right"], " camRight[Right] = ", camRight["Right"], " cam[Right] = ", cam["Right"])
    param = camObz["Bottom"]                    # получить значение переменной param из объекта свойства camObz["Bottom"]
    if param == 0:                              # если param = 0, то ...
        camObz["Bottom"] = int((Hmax-2)/H*0.75) # присвоить свойству camObz["Bottom"] целочисленное значение int((Hmax-2)/H*0.75)
        camLeft["Bottom"] = camObz["Bottom"]    # присвоить камере CameraLeft то же значение
        camRight["Bottom"] = camObz["Bottom"] # присвоить камере CameraRight то же значение
        cam["Bottom"] = camObz["Bottom"] # присвоить камере Camera то же значение
        print("50 camObz[Bottom] = ", camObz["Bottom"], " camLeft[Bottom] = ", camLeft["Bottom"], " camRight[Bottom] = ", camRight["Bottom"], " cam[Bottom] = ", cam["Bottom"])
    param = camObz["Top"]                       # получить значение переменной param * H из объекта свойства camObz["Top"]
    if param == 0:                              # если param = 0, то ...
        camObz["Top"] = int((Hmax-2)/H)         # присвоить свойству camObz["Top"] целочисленное значение int((Hmax-2)/H)
        camLeft["Top"] = camObz["Top"]     # присвоить камере CameraLeft то же значение
        camRight["Top"] = camObz["Top"]     # присвоить камере CameraRight то же значение
        cam["Top"] = camObz["Top"]         # присвоить камере Camera то же значение
        print("57 camObz[Top] = ", camObz["Top"], " camLeft[Top] = ", camLeft["Top"], " camRight[Top] = ", camRight["Top"], " cam[Top] = ", cam["Top"])
    param = camObz["Focus"]                     # получить значение переменной param * H из объекта свойства camObz["Top"]
    if param == 150:                            # если param = 0, то ...
        camObz["Focus"] = int(100)              # присвоить свойству camObz["Focus"] целочисленное значение int(100)
        camLeft["Focus"] = camObz["Focus"] # присвоить камере CameraLeft то же значение
        camRight["Focus"] = camObz["Focus"] # присвоить камере CameraRight то же значение
        cam["Focus"] = camObz["Focus"]     # присвоить камере Camera то же значение
        print("66 camObz[Focus] = ", camObz["Focus"], " camLeft[Focus] = ", camLeft["Focus"], " camRight[Focus] = ", camRight["Focus"], " cam[Focus] = ", cam["Focus"])
    car["PlayStart"] = True         # свойству "PlayStart" присвоить значение True означающее проведение начальной установки свойств в соответствии с размером экрана
Название: Re: Можно ли через переменную назначить объект?
Отправлено: Novichok от 15 Октябрь 2018, 21:06:16
>> в котором игровые свойства назначены только для камеры "CameraObzora" - у других камер их нет. Вы вполне можете убедиться в этом.
... предполагаю что где-то в этом коде ...
Код
import bge                                      # импортируем модуль BGE
from bge import logic                         # импортировать logic из модуля bge
import math                                     # импортируем модуль Math
from mathutils import Vector                    # из модуля mathutils импортировать Vector 

print("!!!!!!!!!!! Start ")
scene = bge.logic.getCurrentScene()             # получить текущую сцену
objList = scene.objects                         # получить список объектов
cont = bge.logic.getCurrentController()     # получить текущий контроллер
car = objList["Car"]                            # получить объект «Car»
camDriv = objList["Camera drivera"]          # получить камеру большого окна с названием Camera drivera

if car["PlayStart"] == False :                  # если старт игры ещё не был выполнен, то ...
    scene.active_camera = camDriv        # активировать как камеру большого окна Camera drivera
    camObz = objList["CameraObzora"]     # получить камеру CameraObzora для дополнительного окна из objList
    camLeft = objList["CameraLeft"]         # получить камеру CameraLeft для дополнительного окна
    camRight = objList["CameraRight"]     # получить камеру CameraRight для дополнительного окна
    cam = objList["Camera"]                 # получить камеру  преследования Camera для дополнительного окна
    car["cameraObz"] = camObz                   # сохранить в свойство cameraObz значение camObz
    print("PlayStart == False camObz = ", camObz)
    logic.globalDict['Time'] = 0                # получить в глобальную переменную Time значение 0
    logic.globalDict['StartTime'] = 0           # запомнить время старта
    logic.globalDict['StPos'] = Vector((0,0,0)) # запомнить стартовую позицию авто
    logic.globalDict['StOr'] = Vector((0,0,0))  # запомнить стартовую ориентацию авто
    logic.globalDict['VecCar'] = Vector((0,0,1))# получить в глобальную переменную вектора vecCar значение 0,0,1
    W = bge.render.getWindowWidth() / 100     # получить Ширину окна
    H = bge.render.getWindowHeight() / 100     # получить Высоту окна
    Wmax = bge.render.getWindowWidth()         # получить максимальную Ширину окна
    Hmax = bge.render.getWindowHeight()         # получить максимальную Высоту окна
    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"])
    param = camObz["Right"]                     # получить значение переменной param из объекта свойства camObz["Right"]
    if param == 0:                              # если param = 0, то ...
        camObz["Right"] = int((Wmax-2)/W)       # присвоить свойству camObz["Right"] целочисленное значение int((Wmax-2)/W)
        camLeft["Right"] = camObz["Right"] # присвоить камере CameraLeft то же значение
        camRight["Right"] = camObz["Right"] # присвоить камере CameraRight то же значение
        cam["Right"] = camObz["Right"]     # присвоить камере Camera то же значение
        print("43 camObz[Right] = ", camObz["Right"], " camLeft[Right] = ", camLeft["Right"], " camRight[Right] = ", camRight["Right"], " cam[Right] = ", cam["Right"])
    param = camObz["Bottom"]                    # получить значение переменной param из объекта свойства camObz["Bottom"]
    if param == 0:                              # если param = 0, то ...
        camObz["Bottom"] = int((Hmax-2)/H*0.75) # присвоить свойству camObz["Bottom"] целочисленное значение int((Hmax-2)/H*0.75)
        camLeft["Bottom"] = camObz["Bottom"]    # присвоить камере CameraLeft то же значение
        camRight["Bottom"] = camObz["Bottom"] # присвоить камере CameraRight то же значение
        cam["Bottom"] = camObz["Bottom"] # присвоить камере Camera то же значение
        print("50 camObz[Bottom] = ", camObz["Bottom"], " camLeft[Bottom] = ", camLeft["Bottom"], " camRight[Bottom] = ", camRight["Bottom"], " cam[Bottom] = ", cam["Bottom"])
    param = camObz["Top"]                       # получить значение переменной param * H из объекта свойства camObz["Top"]
    if param == 0:                              # если param = 0, то ...
        camObz["Top"] = int((Hmax-2)/H)         # присвоить свойству camObz["Top"] целочисленное значение int((Hmax-2)/H)
        camLeft["Top"] = camObz["Top"]     # присвоить камере CameraLeft то же значение
        camRight["Top"] = camObz["Top"]     # присвоить камере CameraRight то же значение
        cam["Top"] = camObz["Top"]         # присвоить камере Camera то же значение
        print("57 camObz[Top] = ", camObz["Top"], " camLeft[Top] = ", camLeft["Top"], " camRight[Top] = ", camRight["Top"], " cam[Top] = ", cam["Top"])
    param = camObz["Focus"]                     # получить значение переменной param * H из объекта свойства camObz["Top"]
    if param == 150:                            # если param = 0, то ...
        camObz["Focus"] = int(100)              # присвоить свойству camObz["Focus"] целочисленное значение int(100)
        camLeft["Focus"] = camObz["Focus"] # присвоить камере CameraLeft то же значение
        camRight["Focus"] = camObz["Focus"] # присвоить камере CameraRight то же значение
        cam["Focus"] = camObz["Focus"]     # присвоить камере Camera то же значение
        print("66 camObz[Focus] = ", camObz["Focus"], " camLeft[Focus] = ", camLeft["Focus"], " camRight[Focus] = ", camRight["Focus"], " cam[Focus] = ", cam["Focus"])
    car["PlayStart"] = True         # свойству "PlayStart" присвоить значение True означающее проведение начальной установки свойств в соответствии с размером экрана
Николай, извините, в этом коде что? В этом коде я назначил игровые свойства для остальных камер?
Как пример, с помощью строки:
camRight["Focus"] = int(100)
я могу создать игровое свойство для камеры camRight со значением int(100), вы это хотите сказать?
Название: Re: Можно ли через переменную назначить объект?
Отправлено: Николай Николаев от 16 Октябрь 2018, 04:41:38
>> Свойства "Left", "Bottom", "Right", "Top" определены мною только для камеры "CameraObzora".
... вроде в этом коде описано присвоение и других свойств Left, Right, Bottom, Top? ...
Код
    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"])
    param = camObz["Right"]                     # получить значение переменной param из объекта свойства camObz["Right"]
    if param == 0:                              # если param = 0, то ...
        camObz["Right"] = int((Wmax-2)/W)       # присвоить свойству camObz["Right"] целочисленное значение int((Wmax-2)/W)
        camLeft["Right"] = camObz["Right"] # присвоить камере CameraLeft то же значение
        camRight["Right"] = camObz["Right"] # присвоить камере CameraRight то же значение
        cam["Right"] = camObz["Right"]     # присвоить камере Camera то же значение
        print("43 camObz[Right] = ", camObz["Right"], " camLeft[Right] = ", camLeft["Right"], " camRight[Right] = ", camRight["Right"], " cam[Right] = ", cam["Right"])
    param = camObz["Bottom"]                    # получить значение переменной param из объекта свойства camObz["Bottom"]
    if param == 0:                              # если param = 0, то ...
        camObz["Bottom"] = int((Hmax-2)/H*0.75) # присвоить свойству camObz["Bottom"] целочисленное значение int((Hmax-2)/H*0.75)
        camLeft["Bottom"] = camObz["Bottom"]    # присвоить камере CameraLeft то же значение
        camRight["Bottom"] = camObz["Bottom"] # присвоить камере CameraRight то же значение
        cam["Bottom"] = camObz["Bottom"] # присвоить камере Camera то же значение
        print("50 camObz[Bottom] = ", camObz["Bottom"], " camLeft[Bottom] = ", camLeft["Bottom"], " camRight[Bottom] = ", camRight["Bottom"], " cam[Bottom] = ", cam["Bottom"])
    param = camObz["Top"]                       # получить значение переменной param * H из объекта свойства camObz["Top"]
    if param == 0:                              # если param = 0, то ...
        camObz["Top"] = int((Hmax-2)/H)         # присвоить свойству camObz["Top"] целочисленное значение int((Hmax-2)/H)
        camLeft["Top"] = camObz["Top"]     # присвоить камере CameraLeft то же значение
        camRight["Top"] = camObz["Top"]     # присвоить камере CameraRight то же значение
        cam["Top"] = camObz["Top"]         # присвоить камере Camera то же значение
        print("57 camObz[Top] = ", camObz["Top"], " camLeft[Top] = ", camLeft["Top"], " camRight[Top] = ", camRight["Top"], " cam[Top] = ", cam["Top"])
    param = camObz["Focus"]                     # получить значение переменной param * H из объекта свойства camObz["Top"]
   
Название: Re: Можно ли через переменную назначить объект?
Отправлено: Novichok от 16 Октябрь 2018, 09:34:18
>> Свойства "Left", "Bottom", "Right", "Top" определены мною только для камеры "CameraObzora".
... вроде в этом коде описано присвоение и других свойств Left, Right, Bottom, Top? ...
Николай, вы не ответили на мой вопрос:
Цитировать
"Как пример, с помощью строки:
camRight["Focus"] = int(100)
я могу создать игровое свойство для камеры camRight со значением int(100), вы это хотите сказать? "
потому я удалил все игровые свойства для всех камер в Редакторе логики в колонке свойств.
В стартовом скрипте прописал свойства для всех камер, как предположил ранее. Запустил движок и, действительно получил изображение дополнительного окна.
Интересное кино получается, для чего в этом случае в Редакторе логики эта морока со свойствами, в чём смысл в ней? Я полагал что здесь объявляются и назначаются свойства, а в скриптах только меняется их значение.
Попутный вопрос, добавление и их определение сенсоров, контроллеров, актуаторов так же возможно в скриптах? Если возможно, то где можно ознакомиться с азами?
Название: Re: Можно ли через переменную назначить объект?
Отправлено: Novichok от 16 Октябрь 2018, 13:08:57
И, всё же, в моём ответе 17 я привёл картинку с постоянными значениями вывода дополнительного окна, но почему-то вывод осуществляет скрипт View для разных камер в разные места. Как я понимаю, при одинаковых параметрах вывода и место вывода окна должно быть одно.
Кто-нибудь может поделиться предположением по причине такого явления?
Ссылка на файл: https://my-files.ru/rp3czy
Название: Re: Можно ли через переменную назначить объект?
Отправлено: Николай Николаев от 16 Октябрь 2018, 18:36:27
>> Николай, вы не ответили на мой вопрос:
... нет ...
Название: Re: Можно ли через переменную назначить объект?
Отправлено: Novichok от 16 Октябрь 2018, 21:19:28
>> Николай, вы не ответили на мой вопрос:
... нет ...
На нет и суда нет.
Название: Re: Можно ли через переменную назначить объект?
Отправлено: Samovar от 16 Октябрь 2018, 21:26:08
Цитировать
И, всё же, в моём ответе 17
Убедительная просьба, вставлять перекрёстные ссылки на свои сообщения, если вы их упоминаете, чтобы не искать их по номерам...
Допустим так: в моём ответе 17    я в своём Ответе #9
Сделать это  можно так:
(http://sd.uploads.ru/t/g8rv0.gif)
Название: Re: Можно ли через переменную назначить объект?
Отправлено: Novichok от 16 Октябрь 2018, 22:58:53
Цитировать
И, всё же, в моём ответе 17
Убедительная просьба, вставлять перекрёстные ссылки на свои сообщения, если вы их упоминаете, чтобы не искать их по номерам...
Допустим так: в моём ответе 17    я в своём Ответе #9
Сделать это  можно так:
(http://sd.uploads.ru/t/g8rv0.gif)
Хороший выход. Приму к сведению.