Blender & BGE [Вопрос - ответ]
| |
Lertmind | Дата: Понедельник, 27 Июня 2016, 15:07 | Сообщение # 21 |
заслуженный участник
Сейчас нет на сайте
| ИльяНедогонов, чтобы узнать есть ли ключ в словаре можно использовать оператор in:
Код d = {"a" : 1, "b" : 2 } if "a" in d: pass Ты же сравнивал словарь со списком, вот правильный код:
Код import bge cont = bge.logic.getCurrentController() scene = bge.logic.getCurrentScene() objList = scene.objects objList2 = scene.objectsInactive
name = "Snarjad" if name in scene.objects: objSnarjad = objList[name] print("objList Snarjad = true") elif name in scene.objectsInactive: objSnarjad = objList2[name] print("objList2 Snarjad = true")
print("Scrept Dvigenie Snarjada") print("objSnarjad.worldPosition = ", objSnarjad.worldPosition)
Сообщение отредактировал Lertmind - Понедельник, 27 Июня 2016, 15:14 |
|
| |
ИльяНедогонов | Дата: Понедельник, 27 Июня 2016, 17:22 | Сообщение # 22 |
частый гость
Сейчас нет на сайте
| Lertmind, большое вам спасибо за помощь. Код работает как мне нужно. Не хотелось бы злоупотреблять вашим вниманием, но, коль пошла такая пьянка, то уточните момент: если мне необходимо несколько объектов проверять, например десяток, то как мне лучше эту проверку оформить? И ещё, может, посоветуете источники информации для совсем-совсем начинающих о написании скриптов на Python для BGE. То, что мне попадалось, с моей подготовкой, точнее отсутствием таковой, трудновато даётся.
|
|
| |
Lertmind | Дата: Понедельник, 27 Июня 2016, 18:13 | Сообщение # 23 |
заслуженный участник
Сейчас нет на сайте
| Цитата ИльяНедогонов ( ) если мне необходимо несколько объектов проверять, например десяток, то как мне лучше эту проверку оформить? Зависит от того, что ты хочешь на выходе получить и для какой цели. В любом случае, будет использоваться итерация по нужным именам объектов, простой пример:
Код names = ["1", "2", "3"] # Имена объектов objects = { "1" : 10, "3": 30, "4" : 40 } # Активные объекты for name in names: if name in objects: print("{} is active".format(name)) else: print("{} is inactive".format(name)) Выведет:
Код 1 is active 2 is inactive 3 is active Если ты знаешь, что объект точно есть, то нет смысла проверять в неактивных, иначе делаешь проверку и среди активных.
Цитата ИльяНедогонов ( ) И ещё, может, посоветуете источники информации для совсем-совсем начинающих о написании скриптов на Python для BGE. Сначала подучи Python, почитай книгу или статьи в интернете. Твоя ошибка была элементарно в незнании языка, а не BGE. Я BGE не знаю и какого-то хорошего источника не знаю. Что вообще есть в API, очевидно надо смотреть в документации https://www.blender.org/api/blender_python_api_current/, материалов по BGE на английском ищется порядочно, про русский не знаю.
Сообщение отредактировал Lertmind - Понедельник, 27 Июня 2016, 18:15 |
|
| |
ИльяНедогонов | Дата: Среда, 29 Июня 2016, 12:35 | Сообщение # 24 |
частый гость
Сейчас нет на сайте
| Спасибо за внимание. Вся данная вами информация мне была полезна. Всех вам благ.
Добавлено (29 июня 2016, 12:35) --------------------------------------------- Lertmind, добрый день. Предоставленный вами код действительно работает, но я поспешил заявить, что он работает именно так как мне нужно, но по порядку. Я не понял в строке: objects = { "1" : 10, "3": 30, "4" : 40 } # Активные объекты Мы назначаем активные объекты 1,3,4, (2-ой, не назначен, потому неактивен) а через двоеточие числовые параметры этих объектов? Вы их условно назначили или в них кроется какой-то смысл? Далее, в моём случае, есть несколько объектов которые могут быть видимы – активны, невидимы – неактивны и могут отсутствовать, например быть взорванными. Вот я и спрашивал о том, как в скрипте проверить состояние объекта. Я попытался сделать это через: objList = scene.objects # Активные объекты objList2 = scene.objectsInactive # Неактивные объекты, и если ни в первом, ни во втором списке нет, то значит, объект отсутствует. Попытался во вторую строку «пристроить» objList таким образом:
Код names = ["Mishen", "Snarjad", "Vspyshka"] # Имена объектов objects = objList # Активные объекты for name in names: if name in objects: print("{} is active".format(name)) else: print("{} is inactive".format(name)) Получилось, но здесь ведь идёт определение принадлежит объект к списку objList или нет, а мне нужна проверка принадлежности и к списку objList2 если нет в списке objList. Вот тут я прочно застрял. В предложенных вами ссылках подходящего ничего не нашёл – видно это уже нюансы а не основы. Может, найдёте время и сориентируете меня? P.S. Что такое ".format(name)" в операторе print?
Сообщение отредактировал ИльяНедогонов - Среда, 29 Июня 2016, 12:48 |
|
| |
Lertmind | Дата: Среда, 29 Июня 2016, 14:00 | Сообщение # 25 |
заслуженный участник
Сейчас нет на сайте
| Цитата ИльяНедогонов ( ) а через двоеточие числовые параметры этих объектов? Никакого смысла там не кроется, может быть объект любого типа.
Цитата ИльяНедогонов ( ) Попытался во вторую строку «пристроить» objList таким образом: Я писал, что этот код подходит, если объект точно существует, иначе можно так написать:
Код names = ["Mishen", "Snarjad", "Vspyshka"] # Имена объектов for name in names: if name in objList: # Среди активных print("{} is active".format(name)) elif name in objList2: # Среди неактивных print("{} is inactive".format(name)) else: # Не существует print("{} don't exist".format(name))
Цитата ИльяНедогонов ( ) В предложенных вами ссылках подходящего ничего не нашёл Я давал только одну ссылку https://www.blender.org/api/blender_python_api_current/ - документация по Blender API, там указаны все классы, методы и тому подобное, которые есть в Blender, очевидно там нет ответа на ваш вопрос, потому что это вопрос алгоритма.
Цитата ИльяНедогонов ( ) Что такое ".format(name)" в операторе print? "{} is active" - строка, значит format() - метод строки. Строка - встроенный тип языка Python, следовательно читать про него надо в официальной документации https://docs.python.org/3/library/stdtypes.html#str.format. Если коротко, то это метод для форматирования строки, например число можно вывести в шестнадцатеричной системе счисления или указать количество знаков после точки в вещественном числе. Кстати, print в Python 3 - функция, а в Python 2 - инструкция (тоже что оператор).Добавлено (29 июня 2016, 14:00) --------------------------------------------- ИльяНедогонов, как я уже говорил, тебе необходимо изучить основы Python, чтобы не застревать в простых местах.
|
|
| |
ИльяНедогонов | Дата: Среда, 29 Июня 2016, 18:10 | Сообщение # 26 |
частый гость
Сейчас нет на сайте
| Цитата Я давал только одну ссылку https://www.blender.org/api/blender_python_api_current/ - документация по Blender API Совершенно верно, однако по этой ссылке я вышел в раздел "Блендер/Документации Python" в котором, воспользовался ещё семью ссылками. Ваша новая ссылка: https://docs.python.org/3/library/stdtypes.html#str.format меня заинтересовала, и я её внёс в папку "Избранное" - будет ещё одна возможность ознакомиться с грамматикой Питона. Вообще-то меня сейчас интересует Blender и конкретно сейчас его игровой движок BGE. Но движок очень мощный, с большими возможностями, которые иногда приходится корректировать с помощью скриптов, а их в свою очередь необходимо кодировать в Питоне. Когда-то давно писал несложные программы в Паскале и Бейсике. Объектным программированием не занимался вообще. Вот и приходится совмещать изучение возможностей BGE, с его API, и Python'а. Ваш присланный код, это как раз то, что мне нужно и я вам признателен за понимание. Спасибо, всех вам благ.
|
|
| |
sfabrikan | Дата: Пятница, 01 Июля 2016, 13:06 | Сообщение # 27 |
БЕЗУМЕЦ!!!
Сейчас нет на сайте
| Я создал некую процедурную текстуру (карту высот грубо говоря) Вопрос: Как сохранить сделанную процедурную текстуру в виде изображения?
Это я
|
|
| |
ИльяНедогонов | Дата: Суббота, 28 Января 2017, 11:17 | Сообщение # 28 |
частый гость
Сейчас нет на сайте
| Всем добрый день. Помогите решить проблему. Есть плоскость, на которой лежит стандартный куб. Куб с помощью клавиш со стрелками можно перемещать по плоскости. На некотором от него расстоянии находится, например, сфера, которая с помощью worldPosition перемещается идентично кубу. Нужно как-то сделать, чтобы в случае вращения куба вокруг его оси Z сфера перемещалась, оставаясь против той же грани куба, напротив которой находилась изначально. Предполагаю, что этого можно добиться с помощью worldAngularVelocity, а вот как применить, что-то никак не придумаю, ведь в случае поворота куба сфера должна двигаться на равном удалении по кругу.
|
|
| |
rivalfx | Дата: Суббота, 18 Февраля 2017, 14:13 | Сообщение # 29 |
участник
Сейчас нет на сайте
| к кубику применена физика charaster , движущаяся платформа static. кубик попадая на платформу не едет на ней.. что надо сделать?... видео проблемы может кто подсказать..
|
|
| |
ИльяНедогонов | Дата: Четверг, 29 Июня 2017, 17:37 | Сообщение # 30 |
частый гость
Сейчас нет на сайте
| Всем привет. Кто-нибудь знает, можно ли с помощью скрипта поменять цвет объекта - нажал на 1 и куб покраснел, нажал на 2 и куб принял другой цвет? Попробовал вот такой код:
Код import bge scene = bge.logic.getCurrentScene() # получить сцену objList1 = scene.objects # получить список активных объектов сцены cube = objList1["Cube"] # получить объект пустышка kb1 = cube.sensors ["Keyboard1"] # получить сенсор Keyboard1 kb2 = cube.sensors ["Keyboard2"] # получить сенсор Keyboard2 if kb1.positive: cube.color = [0.8,0.766,0.034,0] # покрасить куб в золотистый цвет elif kb2.positive: cube.color = [1,0,0,0]
Blender не ругается, но и не перекрашивает объект.
Сообщение отредактировал ИльяНедогонов - Четверг, 29 Июня 2017, 17:41 |
|
| |
MasTerilDar | Дата: Пятница, 30 Июня 2017, 18:45 | Сообщение # 31 |
безталантливый ХУДОжник пиксель артист :3
Сейчас нет на сайте
| Цитата ИльяНедогонов ( ) Кто-нибудь знает, можно ли с помощью скрипта поменять цвет объекта
Код import bge
cont = logic.getCurrentController() # контроллер obj = cont.owner # получаем доступ к объекту sens = cont.sensors["Keyboard"] # пилим наш сенсор if sens.positive: obj.color = [0.8,0.766,0.034,0] # при работающем сенсоре золотой else: obj.color = [1,0,0,0] # а так он красный
Alle von euch Nya!
Сообщение отредактировал MasTerilDar - Пятница, 30 Июня 2017, 18:45 |
|
| |
ИльяНедогонов | Дата: Воскресенье, 02 Июля 2017, 07:04 | Сообщение # 32 |
частый гость
Сейчас нет на сайте
| Извините MasTerilDar, а в чём отличие вашего кода от моего? Переокрашивания не происходит и с вашим кодом, и после исправления строки cont = logic.getCurrentController() на cont = bge.logic.getCurrentController() # контроллер Скрин консоли: http://s1.uploadpics.ru/images/Z1sj1yqyOG.jpg
|
|
| |
MasTerilDar | Дата: Воскресенье, 02 Июля 2017, 20:00 | Сообщение # 33 |
безталантливый ХУДОжник пиксель артист :3
Сейчас нет на сайте
| Цитата ИльяНедогонов ( ) а в чём отличие вашего кода от моего?
я обращаюсь напрямую к объекту без списков
Цитата ИльяНедогонов ( ) Переокрашивания не происходит и с вашим кодом, и после исправления строки
попробуйте заменить
на
кстати, может и твой код заработает
Alle von euch Nya!
Сообщение отредактировал MasTerilDar - Воскресенье, 02 Июля 2017, 20:46 |
|
| |
ИльяНедогонов | Дата: Воскресенье, 02 Июля 2017, 21:02 | Сообщение # 34 |
частый гость
Сейчас нет на сайте
| MasTerilDar, у меня нет оснований не верить вам, но у меня что-то идёт не так. Подумал что у меня метод затенения "Материал" является причиной, увидев у вас "Сплошной". Поменял. Толку ни какого. Причина есть конечно, но вот какая? Вроде всё как у вас. Попробовал вставить картинку, но как у вас опять не получилось. Не подскажите как это правильно делать? В спойлере получилась ссылка, а не рисунок. Не подскажите как правильно вставлять рисунок? Скрипты только-только начал осваивать, потому и применяю их на стандартных объектах чтобы самому не заморачиваться и других не заморачивать.
Сообщение отредактировал ИльяНедогонов - Воскресенье, 02 Июля 2017, 21:27 |
|
| |
MasTerilDar | Дата: Воскресенье, 02 Июля 2017, 21:35 | Сообщение # 35 |
безталантливый ХУДОжник пиксель артист :3
Сейчас нет на сайте
| Цитата ИльяНедогонов ( ) но у меня что-то идёт не так
скинь .blend файл
Цитата ИльяНедогонов ( ) Попробовал вставить картинку, но как у вас опять не получилось. Не подскажите как это правильно делать?
Код [spoiler=тут можно текст][img]ссылка[/img][/spoiler]
Alle von euch Nya!
|
|
| |
ИльяНедогонов | Дата: Понедельник, 03 Июля 2017, 21:39 | Сообщение # 36 |
частый гость
Сейчас нет на сайте
| Цитата MasTerilDar ( ) Спасибо MasTerilDar, при случае попробую. Ссылка на файл Change of colour.blend: http://my-files.ru/n7wxpk
Добавлено (03 июля 2017, 21:39) ---------------------------------------------
MasTerilDar, а чего тянуть с пробой картинки? Взгляните на системные настройки моего Blender'а. Может в них дело? Ура-а, заработало. (Пока рисунок).
Сообщение отредактировал ИльяНедогонов - Понедельник, 03 Июля 2017, 21:43 |
|
| |
MasTerilDar | Дата: Вторник, 04 Июля 2017, 13:52 | Сообщение # 37 |
безталантливый ХУДОжник пиксель артист :3
Сейчас нет на сайте
| ИльяНедогонов, у вас был включен GLSL, но в материале не был включен Objects color(material > option > object color) В режиме мультитекстуринга и без него работает, но в GLSL надо включать.
И в цвете надо альфу указывать в единицу
Код obj.color = [1,0,0,0] # так он прозрачный obj.color = [1,0,0,1] # а так он красный
Alle von euch Nya!
|
|
| |
ИльяНедогонов | Дата: Воскресенье, 09 Июля 2017, 07:01 | Сообщение # 38 |
частый гость
Сейчас нет на сайте
| Цитата MasTerilDar ( ) ИльяНедогонов, у вас был включен GLSL, но в материале не был включен Objects color(material > option > object color) В режиме мультитекстуринга и без него работает, но в GLSL надо включать.
Спасибо MasTerilDar, переключение в режим мультитекстуринга действительно дало результат и куб начал окрашиваться. Галочка в опции Objects color в режиме GLSL так же исправила ситуацию. Спасибо за исчерпывающую информацию и помощь.
Ваша помощь весьма наглядна, ещё раз спасибо.Добавлено (09 июля 2017, 07:01) --------------------------------------------- Всем добрый день. Есть несколько объектов объединённых родительской связью в одной сцене. Можно ли перенести эти объекты "чохом" в другую существующую сцену, с существующими в ней объектами не нарушая её работоспособность, лишив предыдущую сцену этих объектов? Если можно, то как? Уж очень не хочется вновь создавать все эти объекты с их связями в нужной сцене.
|
|
| |
MasTerilDar | Дата: Вторник, 11 Июля 2017, 10:16 | Сообщение # 39 |
безталантливый ХУДОжник пиксель артист :3
Сейчас нет на сайте
| ИльяНедогонов, 1. выделяешь объекты со связями 2. ctrl+L 3. to scene > %scenename% 4. ???? 6. PROFIT
Если надо сделать это в игре, то вроде через актуатор EditObject это вполне возможно.
Код cont = logic.getCurrentController() own = cont.owner
addObj = cont.actuators ['addObj']
addObj.object = "Parent" addObj.object = "Child1" addObj.object = "Child2"
Скорее всего код выше не работает(сейчас нет возможности проверить), ведь вроде у каждого объекта должен быть свой актуатор, я точно не помню. Обычно такое через ноды делал, создавая на каждый объект пустышку, которая добавляла его. Если объект имеет связи, и родитель присутствует, то связь сохраняется. При желании(попытка кода выше) можно запилить и через одну пустышку и родителя и потомков.
Alle von euch Nya!
|
|
| |
ИльяНедогонов | Дата: Понедельник, 17 Июля 2017, 18:31 | Сообщение # 40 |
частый гость
Сейчас нет на сайте
| Цитата MasTerilDar ( ) Если надо сделать это в игре, то вроде через актуатор EditObject это вполне возможно. Нет, не в игре, а в объектном режиме - просто решил уложить всё в одну сцену. Не хотелось вновь создавать все эти объекты с их связями в нужной сцене, но пришлось (уж очень не терпелось). Копировал Ctrl+C и вставлял через Ctrl+V каждый объект, ну, а установка связей, так это пустяк. Ctrl+L, это разве выделение не всей сцены? Честно говоря пока не пользовался этой комбинацией, потому и не знаком. 3-ий и 4-ый пункты, увы, не понял. Однако, всё равно спасибо за желание мне помочь.
|
|
| |
|