Список разделов › Геймдев в Blender › Игровой движок Blender
Плюсую!Bibo писал(а):Модератору бы в тему заглянуть, проверить дискуссию на релевантность.
С чего вдруг такой глубокомысленный вывод? Мне уже за 40 перевалило, я такими глупостями, как обижаться, уже давно не занимаюсь.Август писал(а):jstas, что же так, сколько раз говорил чтобы я не обижался, а сам обиделся? Что так, и на что?
подними куб над опорной точкой, он и будет парить над плоскостью.Август писал(а):От моего последнего вопроса вы ушли, но у меня тут появилось предположение, что по оси Z не меняет своё положение, ни куб, ни плоскость, а дело в том, что в аксонометрии куб может оказываться ближе к камере, а плоскость дальше и потому создаётся впечатление, что куб лежит на плоскости, а не парит над ней.
если только для того, чтобы проверить, парит куб над плоскостью, или стоит на ней, то как раз кирпичиками это сделать гораздо проще.Август писал(а):было бы совсем неплохо убедиться что куб парит над плоскостью, а не стоит на ней, например перемещая и вращая камеру но без логических кирпичиков, а с помощью скриптов.
Bibo писал(а):Модератору бы в тему заглянуть, проверить дискуссию на релевантность.
Извините, мне наверно показалось, всё-таки моя подсказка могла быть неправильно расценена.jstas писал(а):С чего вдруг такой глубокомысленный вывод? Мне уже за 40 перевалило, я такими глупостями, как обижаться, уже давно не занимаюсь.
Такой цели у меня нет. Я теперь практически уверен, что куб появляется в том месте, в каком и должен, и дело не в координате Z, а именно из-за точки обозревания из камеры. Зрительный обман.подними куб над опорной точкой, он и будет парить над плоскостью.Август писал(а):
От моего последнего вопроса вы ушли, но у меня тут появилось предположение, что по оси Z не меняет своё положение, ни куб, ни плоскость, а дело в том, что в аксонометрии куб может оказываться ближе к камере, а плоскость дальше и потому создаётся впечатление, что куб лежит на плоскости, а не парит над ней.
Нет, параллельно тому, чтобы убедиться, ещё и ознакомиться со способом управления камерой. У меня была попытка, безуспешная, а потом перерыв, после которого что-то другое заинтересовало, и камерой я больше не занимался.если только для того, чтобы проверить, парит куб над плоскостью, или стоит на ней, то как раз кирпичиками это сделать гораздо проще.Август писал(а):
было бы совсем неплохо убедиться что куб парит над плоскостью, а не стоит на ней, например перемещая и вращая камеру но без логических кирпичиков, а с помощью скриптов.
Примером не поделитесь как это может выглядеть, хотя бы в фрагменте условия, который я привёл? Буду очень признателен.andreymal писал(а):Питоновый метод addObject возвращает свежесозданный объект, который можно положить в какую-нибудь переменную и управлять через неё
Август писал(а):Вот ещё вопрос. Нашлёпал я объектов, а Blender как их различает, ведь у них у всех одно и тоже имя. Я в этом убеждаюсь в условии:
elif getCube == 1: # если активирован актуатор Edit Object и куб добавлен в сцену
Август писал(а):Кто-нибудь может поделиться своими соображениями по этому поводу? Как из десятка вновь добавленных объектов выбрать желаемый?
import bge
cont = bge.logic.getCurrentController()
scene = bge.logic.getCurrentScene()
cube = cont.owner
sens = cont.sensors['Keyboard']
if sens.positive:
newOb = scene.addObject('Circle', cube, 0)
# смотрим идентификатор свежесозданного объекта
print(id(newOb))
Август писал(а):А вообще можно в Python каким-либо образом добавлять в название объекта символы в процессе работы (отображения сцены)? Например, для переменной cube, чтобы её название изменялось принимая названия Куб1, Куб2, и т.д.? Именно само название переменной, а не значение.
если взять пример "мутации" экземпляров из доков KX_GameObjectdenis8424 писал(а):Август писал(а):
А вообще можно в Python каким-либо образом добавлять в название объекта символы в процессе работы (отображения сцены)? Например, для переменной cube, чтобы её название изменялось принимая названия Куб1, Куб2, и т.д.? Именно само название переменной, а не значение.
Имя объекта в BGE атрибут только для чтения
class CustomGameObject(bge.types.KX_GameObject): тра-ла-ла
У-у-у, dron, это для начинающего уж очень круто. Мне с месяц потребуется, только для того чтобы заучить то, что вы написали, а понять...dron писал(а):если взять пример из доков KX_GameObject
КОД: ВЫДЕЛИТЬ ВСЁ
class CustomGameObject(bge.types.KX_GameObject): тра-ла-ла
и поиграться с ним подставляя туда разные типы и передавая разные объекты можно докопаться до того, что данный принцип реализует класс PyObjectPlus который является родителем почти всех объектов из пакета bge.types) Дальше уже изучаем доки и включаем фантазию которая приведет к тому, что можно "мутировать" своим классом свойство сцены KX_Scene.objects (это экземпляр класса CListValue потомок PyObjectPlus) в котором уже реализовать что душе угодно (подмена имен и поиск объектов по новым именам и тп а так же изменить поведение свойств или методов экземпляра сцены)
denis8424, прежде чем "выковыривать объект по порядковому номеру" мне необходимо определить этот номер, конкретного, из созданного ранее десятка объектов, объекта. Здесь у меня получился "затык". Выделил я необходимый мне объект, а вот как получить его номер никак не соображу. На сколько я понимаю, строка cube = objList["Cube"] мне выведет название первого, мною добавленного объекта, а не выделенного.denis8424 писал(а):Если тебе нужно выковыривать объект по порядковому номеру, то воспользуйся списком.
cube = objList[num - 1]
# где num - порядковый номер.
cube = currentObj # типа конкретный, выделенный объект
num = objList.index[currentObj] + 1
newOb = scene.addObject('Circle', cube, 0)
objList.append([newOb, num])
for obj, num in objList:
print(obj, num) # просто посмотреть список
# Добавление объекта и создание проперти с порядковым номером
# понятно, что и список и номер откуда-то нужно брать, а не создавать снова каждый раз
newOb = scene.addObject('Circle', cube, 0)
newOb['prop'] = num
objList.append(newOb)
#Поиск объекта с нужным порядковым номером с помощью цикла:
currentObj = None # создаем объект - пустышку
for obj in objList:
if obj['prop'] = currentNum: # currentNum - это порядковый номер
currentObj = obj #записываем на место пустышки объект с нужным порядковым номером
# создаем пустой словарь или достаем его откуда-то.
objDict = {}
# добавляем объект со скрытого слоя
obName = 'Cube'
newOb = scene.addObject(obName, cube)
# Создаем в словаре новую пару ключ- значение:
objDict[num] = newOb # словарь может использовать в качестве ключа переменную типа INT, то есть нужный
# объект можно извлечь просто по номеру
objDict[obName + str(num') = newOb # а можно в качестве ключа использовать строку из имени и порядкового номера объекта
# теперь достаем объект из словаря ( не совсем верно, в словаре всё же хранятся ссылки на объект)
# по номеру
num = 2 # например
cube = objDict[num]
# по имени и номеру
cube = objDict['Cube' + str(num)]
if 'Cube100500' in objDict.keys() == True:
cube = objDict['Cube100500']
(Думаю, скобки всё-таки круглые?)denis8424 писал(а):objList.index[currentObj]
denis8424, спасибо вам БОЛЬШУЩЕЕ за столь подробный и ёмкий ответ. Знаний у меня в Python маловато, потому потребуется некоторое время для усвоения, но даже поверхностный взгляд на ответ очень радует вашей отзывчивостью. Ещё раз спасибо большое - приступаю к освоению.denis8424 писал(а):Август,
Спойлер
andreymal, спасибо за подсказку - проверю.andreymal писал(а):(Думаю, скобки всё-таки круглые?)
from bge.events import LEFTMOUSE
def main(cont):
sens = cont.sensors['ИмяСенсораМыши']
if sens.getButtonStatus(LEFTMOUSE) == 1:
# Добавление объекта
sens = cont.sensors['Mouse']
if sens.positive:
# добавляем объект
Bibo, за эту строку меня Blender отматюгал:Bibo писал(а):if sens.getButtonStatus(LEFTMOUSE) == 1:
emp = objList1["Empty"] # получить объект пустышка
mouseMove = emp.sensors ["MouseMove"] # получить сенсор MouseMove
mouseL = emp.sensors ["MouseL"] # получить сенсор MouseL
mouseR = emp.sensors ["MouseR"] # получить сенсор MouseR
if mouseMove.positive:
emp.worldPosition = mouseMove.hitPosition
if mouseR.positive and getCube == 0 and mouseR.getButtonStatus == 3: # если нажата правая клавиша мышки и свойство пустышки getCube имеет значение 0 - этап готовности к добавлению куба и клавиша отпущена
print("emp.worldPosition - 0 = ", emp.worldPosition)
Август писал(а):if sens.getButtonStatus(LEFTMOUSE) == 1:
Bibo, за эту строку меня Blender отматюгал:
File "Coordinaty cursora", line 17, in <module>
NameError: name 'LEFTMOUSE' is not defined
from bge.events import LEFTMOUSE
Попыток прочитать и осознать сообщение об ошибке не было совсем?Август писал(а):Bibo, за эту строку меня Blender отматюгал:
File "Coordinaty cursora", line 17, in <module>
NameError: name 'LEFTMOUSE' is not defined
В этом кроется заковыка, на первый взгляд несущественная - приходится держать в уме настройки сенсора.denis8424 писал(а):Разница наверное будет в импульсном режиме работы сенсора...
Это вы о ключе левой клавиши? Я же писал что сменил ключ, как увидел эту ошибку, так и сменил. Ошибки не стало, но и легче от этого тоже.Bibo писал(а):Август писал(а):
Bibo, за эту строку меня Blender отматюгал:
File "Coordinaty cursora", line 17, in <module>
NameError: name 'LEFTMOUSE' is not defined
Вернуться в Игровой движок Blender
Сейчас этот раздел просматривают: 1 гость