Четверг, 26 Декабря 2024, 20:13

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 2 из 4
  • «
  • 1
  • 2
  • 3
  • 4
  • »
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
Сейчас нет на сайте
Цитата ИльяНедогонов ()
а в чём отличие вашего кода от моего?


я обращаюсь напрямую к объекту без списков

Цитата ИльяНедогонов ()
Переокрашивания не происходит и с вашим кодом, и после исправления строки


попробуйте заменить

Код
import bge


на

Код
from bge import logic


кстати, может и твой код заработает






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-ый пункты, увы, не понял. Однако, всё равно спасибо за желание мне помочь.
  • Страница 2 из 4
  • «
  • 1
  • 2
  • 3
  • 4
  • »
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг