scene = bge.logic.getCurrentScene()
controller = bge.logic.getCurrentController()
objList = scene.objects
abc = objList["Cab"]
obj = "Cab"
abc = objList[obj]
Николай, что-то идёт не так.Кодobj = "Cab"
abc = objList[obj]
!!!!!!!!!!! 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 объектом, по крайней мере я так понимаю.
... выкладывайте код, пожалуйста ...Николай, извините, но думаю, что, проще с файлом будет разобраться - что-то я накуралесил видно не в скриптах.
>> Сам не вижу где.Я нашёл причину. В скрипте Start я прописываю параметры для камеры CameraObzora, вот они у меня на ней и есть, а другие камеры-то не прописаны.
... смотрите код с комментариями "если название камеры ...., то ...." ...
... попробуйте сначала добиться, чтобы эта логика отрабатывала - насколько понимаю, в коде сравнивается объект со строкой, а судя по комментарию нужно сравнивать строку со строкой - возьмите имя объекта через .name и уже сравнивайте это имя с требуемой строкой ...
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"])
!!!!!!!!!!! Switching Camer
11 sen1 = False sen2 = False sen3 = False sen4 = False
# 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
>> 11 sen1 = False sen2 = False sen3 = False sen4 = FalseНиколай, вопрос снимаю - похоже это срабатывание на отпуск клавиши. Где-то мне попадалась подобная информация. Посмотрел внимательнее и нашёл строку с True - видно при нажатии клавиши, а приведённая мною строка следует позже, скорее всего как результат отпускания клавиши, отсюда и False.
... выложите файл с последними изменениями ...
... попробуйте получить нужную информацию через контроллер ...
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
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
(https://ru.wikibooks.org/wiki/Blender_для_начинающих/Python)Blender для начинающих/Python (http://blender-3d.ru/forum/go.php?url=aHR0cHM6Ly9ydS53aWtpYm9va3Mub3JnL3dpa2kvQmxlbmRlcl/k6/9f7eD36O3g/vno9S9QeXRob24=)Samovar, спасибо за ссылки - информация не может быть лишней - постараюсь ознакомиться с ней.
Там не всё по BGE, конечно, но достаточно, чтобы разбираться в документации и примерах BGE тут: http://bgepython.tutorialsforblender3d.com (http://blender-3d.ru/forum/go.php?url=aHR0cDovL2JnZXB5dGhvbi50dXRvcmlhbHNmb3JibGVuZGVyM2QuY29t)
У меня так же полосой выводится... Но если сделать левую и правую камеры перспективными, а не ортогональными, то всё нормально...Пробовал. Сейчас повторно сделал. На рисунке (я сильно увеличил дополнительное окно) результат смены вида в дополнительном окне - верхняя половина от вида сверху с авто осталась, а нижняя половина, похоже вид из камеры от водителя с капотом авто, которого здесь вообще не может быть. Samovar, честно говоря я никак не могу разобраться, толи я накуролесил, толи Blender куролесит. Хочется думать что я что-то не учёл, и, надо, только найти мою ошибку.
а прозрачное окно потому, что фон прозрачен...Извините, не понял это о чём.
также можно покрутить пустышки левой и правой камер по оси Х... такие соображенияНу, это для уточнения кадра? Мне бы как-то вывести для начала в дополнительное окно виды сверху, слева, справа, преследования, а у ж потом можно будет эстетикой заняться.
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
32 camObz.setViewport(int(camObz["Left"] * W), int(camObz["Bottom"] * H), int(camObz["Right"] * W), int(camObz["Top"] * H))
... если происходит обращение к несуществующим элементам, то должно быть сообщение об ошибке ...Николай, я в своём Ответе #9 от 10 Октябрь 2018, 21:40:08 дал ссылку на файл в котором игровые свойства назначены только для камеры "CameraObzora" - у других камер их нет. Вы вполне можете убедиться в этом.
... проверьте значения элементов перед вызовом функции ...Извините, но я не понял подсказку.
35 int(camObz[Left] * W) = 842 int(camObz[Bottom] * H) = 339
36 int(camObz[Right] * W) = 1127 int(camObz[Top] * H) = 615
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 означающее проведение начальной установки свойств в соответствии с размером экрана
>> в котором игровые свойства назначены только для камеры "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 означающее проведение начальной установки свойств в соответствии с размером экрана
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"]
>> Свойства "Left", "Bottom", "Right", "Top" определены мною только для камеры "CameraObzora".Николай, вы не ответили на мой вопрос:
... вроде в этом коде описано присвоение и других свойств Left, Right, Bottom, Top? ...
"Как пример, с помощью строки:потому я удалил все игровые свойства для всех камер в Редакторе логики в колонке свойств.
camRight["Focus"] = int(100)
я могу создать игровое свойство для камеры camRight со значением int(100), вы это хотите сказать? "
>> Николай, вы не ответили на мой вопрос:На нет и суда нет.
... нет ...
И, всё же, в моём ответе 17Убедительная просьба, вставлять перекрёстные ссылки на свои сообщения, если вы их упоминаете, чтобы не искать их по номерам...
Хороший выход. Приму к сведению.ЦитироватьИ, всё же, в моём ответе 17Убедительная просьба, вставлять перекрёстные ссылки на свои сообщения, если вы их упоминаете, чтобы не искать их по номерам...
Допустим так: в моём ответе 17 (http://blender-3d.ru/forum/index.php/topic,2416.msg32074.html#msg32074) я в своём Ответе #9 (http://blender-3d.ru/forum/index.php/topic,2416.msg32040.html#msg32040)
Сделать это можно так:
(http://sd.uploads.ru/t/g8rv0.gif) (http://uploads.ru/g8rv0.gif)