| 
	
		
		
			| Blender & BGE [Вопрос - ответ] |  |  |  | 
| Lertmind | Дата: Понедельник, 27 Июня 2016, 15:07 | Сообщение # 21 |  |   заслуженный участник Сейчас нет на сайте | ИльяНедогонов, чтобы узнать есть ли ключ в словаре можно использовать оператор in: 
 Код d = {"a" : 1, "b" : 2 }if "a" in d:
 pass
Ты же сравнивал словарь со списком, вот правильный код:
 
 Код import bgecont = 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 active2 is inactive
 3 is active
Если ты знаешь, что объект точно есть, то нет смысла проверять в неактивных, иначе делаешь проверку и среди активных.
 
 Сначала подучи Python, почитай книгу или статьи в интернете. Твоя ошибка была элементарно в незнании языка, а не BGE. Я BGE не знаю и какого-то хорошего источника не знаю. Что вообще есть в API, очевидно надо смотреть в документации https://www.blender.org/api/blender_python_api_current/, материалов по BGE на английском ищется порядочно, про русский не знаю.Цитата ИльяНедогонов (  ) И ещё, может, посоветуете источники информации для совсем-совсем начинающих о написании скриптов на Python для 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, очевидно там нет ответа на ваш вопрос, потому что это вопрос алгоритма.Цитата ИльяНедогонов (  ) В предложенных вами ссылках подходящего ничего не нашёл
 "{} is active" - строка, значит format() - метод строки. Строка - встроенный тип языка Python, следовательно читать про него надо в официальной документации https://docs.python.org/3/library/stdtypes.html#str.format. Если коротко, то это метод для форматирования строки, например число можно вывести в шестнадцатеричной системе счисления или указать количество знаков после точки в вещественном числе.Цитата ИльяНедогонов (  ) Что такое ".format(name)" в операторе print?Кстати, 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-ый пункты, увы, не понял. Однако, всё равно спасибо за желание мне помочь.
 |  |  |  |  |  
 |