BGE, Python , опыты дилетанта.

Список разделов Геймдев в Blender Игровой движок Blender

Описание: Все вопросы и обсуждения, касающиеся BGE
Модераторы: exooman, denis8424

  • 1

Сообщение #341 Bibo » 10.11.2015, 17:04

Собсно, вот текущий этап. Архив тяжеловесный из-за наличия папки с текстурами, пихнул я ее в этот раз из-за новой двери, далее включать не буду.
Теперь уровень топлива и давления растет. Если топливо достигает отметки 100, печка/раздатчик закрываются и блокируются пока уровень топлива не упадет до 80.
Когда уровень давления достигает 5, начинает работать экран и рычаг перемешивания. Пятнашки медленно перемешиваются, если рычаг в положении "мешать".
Шестеренки вращаются под стать движению пустой пятнашки.
Экран в закрытом положении пока не удерживается, думаю нужно сделать фиксированную длительность в 5 секунд.
Если уровень давления падает до 0, жизнедеятельность пятнашек и экрана замирает (по крайней мере должна).
Мгновенного перемешивания и игры пока нет, неприлично туго дался мне этот экран. Дальше должно пойти проще.

UPD: забыл добавить, на Z теперь увеличивается зум камеры. Понадобилось, иначе сложно было разглядеть уровень давления на манометре.
Последний раз редактировалось Bibo 10.11.2015, 19:17, всего редактировалось 3 раз(а).
Bibo
Аватара
Сообщения: 619

Сообщение #342 Mihanik » 10.11.2015, 18:30

Всё отлично! Это у тебя быстро получается, я второй день дым не могу сделать косяк там где меш дыма пересекается с другой геометрией.

Добавлено спустя 5 часов 18 минут:
Други,поясните пожалуйста, вот эта штука двигает UV карты или текстуры по оси Y на 0.01

Код: Выделить всё
import bge

cont = bge.logic.getCurrentController()
own = cont.owner
mesh = own.meshes[0]
array = mesh.getVertexArrayLength(0)

for v in range(0,array):
   vertex = mesh.getVertex(0,v)
   UV = vertex.getUV()
   UV[1] = UV[1]-0.01 #  двигает UV карты? или текстуры? по оси Y на 0.01
   vertex.setUV(UV)

Ни черта не пойму начиная array = mesh.getVertexArrayLength(0)
И оно двигает все UV карты, все текстуры. Что изменить, что бы двигалась только одна текстура?
Mihanik M
Аватара
Сообщения: 1571

  • 1

Сообщение #343 Bibo » 11.11.2015, 09:44

Mihanik,
Код: Выделить всё
import bge

cont = bge.logic.getCurrentController()
own = cont.owner
mesh = own.meshes[0]
# Записывает в переменную "array" кол-во вершин, имеющих материал с id (порядковым номером) 0
array = mesh.getVertexArrayLength(0)

for v in range(0,array):
   # Получаем в переменную vertex вершину с порядковым номером v, имеющую материал с id 0
   vertex = mesh.getVertex(0,v)
   # Получаем UV координаты полученной вершины vertex. Сохраняем их в переменную "UV"
   UV = vertex.getUV()
   #  Изменяем текстурную координату V (Y, если говорить проще) сохраненную в переменной "UV"
   UV[1] = UV[1]-0.01
   # Устанавливаем результат в переменной "UV" вершине vertex
   vertex.setUV(UV)
На форуме совсем никак не предусмотрена подсветка синтаксиса? Очень уж неудобно читать код сплошного зеленого цвета.

Mihanik писал(а):И оно двигает все UV карты, все текстуры. Что изменить, что бы двигалась только одна текстура?
А как вообще двигать текстуру? Текстура двигаться не может, можно только установить координаты вершины на этой текстуре.

Пока не вдавался в работу с несколькими развертками, но исходя из метода KX_VertexProxy.getUV2() можно работать максимум с двумя UV развертками.
.getUV() - возвращает координаты первой UV развертки
.getUV2() - возвращает координаты второй UV развертки
.setUV2(UV, unit) - устанавливает координаты в переменной UV, первой UV развертке если передать аргументу unit значение 1 и второй, если значение 2. Если значение unit не указывать, по умолчанию будут установлены координаты второй UV развертки.
Bibo
Аватара
Сообщения: 619

  • 1

Сообщение #344 Wegemu » 11.11.2015, 10:37

А как вообще двигать текстуру? Текстура двигаться не может, можно только установить координаты вершины на этой текстуре.
Все верно. Изменение UV вершин(ы) влияет на весь стек текстур материала (которые имеют одну UV конечно же).

И оно двигает все UV карты, все текстуры. Что изменить, что бы двигалась только одна текстура?
Как вариант сделать для необходимой текстуры отдельную UV (не проверял данный метод) как описал Bibo.
When debugging, novices insert corrective code; experts remove defective code.
VEゲーム

Ушел в поисках приключений в страну GLSL.
Wegemu M
Аватара
Сообщения: 62

  • 1

Сообщение #345 Bibo » 11.11.2015, 19:41

Вот версия с последними новшествами. Вроде бы теперь:
    перемешивание происходит мгновенно за закрытым экраном, все прочее - эффект
    игра играется после перемешивания
    счетчики измеряют шаги/время
    счетчики обнуляются при рестарте
    если собрать пятнашки правильно, об этом будет сообщено в консоль, в формате - дата начала/потраченное время/кол-во шагов

Нужно проверить:
    все ли работает без ошибок (у меня проблем не возникало, но за кучу тестов я уже начал действовать шаблонно)
    собираются ли пятнашки (у меня собрать пока не получилось, но я скинул это на усталость)

Если все будет шоколадно, можно будет перейти к механизму замены картинок, сохранению прогресса и элементам интерфейса.

UPD: собрать таки получилось трижды. Хотя был момент, когда я отчаялся
Изображение
Последний раз редактировалось Bibo 11.11.2015, 22:37, всего редактировалось 1 раз.
Bibo
Аватара
Сообщения: 619

Сообщение #346 Mihanik » 11.11.2015, 21:48

Bibo, Wegemu, Спасибо! Только с работы прошёл, голова не соображает, завтра буду разбираться с текстурами и координатами, сей час лучше погоняю пятнашки :)

Добавлено спустя 27 минут:
Уря!
Изображение
Но у метя приличный опыт сборки, и попался лёгкий вариант, когда в конце не надо менять две фишки местами. :)

Добавлено спустя 11 минут 39 секунд:
Bibo писал(а):А как вообще двигать текстуру? Текстура двигаться не может, можно только установить координаты вершины на этой текстуре.
Ну к примеру так
Изображение
Эта штука двигает именно конкретную текстуру а не всю UV и параметр в принципе анимируется, если бы это ещё и в БГЕ работало, всё было бы на много проще.
Mihanik M
Аватара
Сообщения: 1571

Сообщение #347 Bibo » 12.11.2015, 10:42

Mihanik, тогда, если все хорошо, нужно обусловить процесс замены текущей картинки пятнашек на новую. Мне видятся два варианта этого действа.

Вариант первый - длинный:
    Суть его сводится к тому, что замена картинки это отдельный процесс, который запускается если не происходит других процессов, то есть, процесса перемешивания:
    • идет игровой процесс (работают счетчики и прочее)
    • игрок выбирает новую картинку в шкафу
    • экран закрывается
    • кран-балка заменяет текущую картинку на новую
    • экран открывается, картинка уже собрана
    • пятнашки можно играть, но счетчики на это не реагируют (картинка ведь уже собрана)
    • чтобы игра началась, нужно перемешать пятнашки рычагом
    Этот вариант подразумевает возможность увидеть картинку уже собранной.

Вариант второй - укороченный:
    Этот вариант подразумевает объединение процесса замены картинки с процессом перемешивания:
    • идет игровой процесс (работают счетчики и прочее)
    • игрок выбирает новую картинку в шкафу
    • ничего не происходит, игра продолжается
    • игрок переводит рычаг в состояние мешать
    • экран закрывается
    • пока экран закрыт, кран-балка производит замену текущей картинки на новую
    • происходит мгновенное перемешивание
    • экран открывается с эффектом медленного перемешивания
    • экран открыт, игра началась, картинка изменена на новую и перемешана
    То есть, картинка заменяется только во время перемешивания, когда экран закрыт и увидеть картинку уже собранной, как в первом варианте, мы не сможем.

Mihanik писал(а):Ну к примеру так
А на что, в данном случае, влияет параметр Z?
Bibo
Аватара
Сообщения: 619

Сообщение #348 Mihanik » 12.11.2015, 12:23

Первый вариант на мой взгляд лучше.Тут только один спорный момент.
-
Bibo писал(а):пятнашки можно играть, но счетчики на это не реагируют (картинка ведь уже собрана)
Возможно лучше запретить играть (Двигапть пятнашки) если картинка уже собрана, это относится и к процессу сборки вообще. На экран надо будет вывести надпись типа "Пятнашки в сборе" или "Процесс завершён".Всё равно какой то акцент на том что пятнашки собраны надо поставить.
Bibo писал(а):А на что, в данном случае, влияет параметр Z?
Для растровых текстур он не работает, нету там третей координаты. Работает для процедурных текстур и когда координаты не UV, а генерируются. Разумеется БГЕ процедурных текстур не понимает.

Добавлено спустя 3 минуты 51 секунду:
Собственно это и есть координаты текстуры, а не вершин развёртки, как я это понимаю.
Mihanik M
Аватара
Сообщения: 1571

Сообщение #349 Mihanik » 12.11.2015, 15:42

Bibo, Ещё одно соображение по замене картинок.
Bibo писал(а):замена картинки это отдельный процесс, который запускается если не происходит других процессов, то есть, процесса перемешивания:
Процесс перемешивания тоже можно прервать, если это не сильно усложнит код.
Mihanik M
Аватара
Сообщения: 1571

Сообщение #350 Bibo » 12.11.2015, 16:11

Mihanik писал(а):Процесс перемешивания тоже можно прервать, если это не сильно усложнит код.
Да я вроде постарался, чтобы не сильно усложнял, но как это будет выглядеть? Допустим, экран начал открываться после перемешивания, но игрок решил сменить картинку и экран резко дергается в обратном направлении, чтобы снова закрыться. То бишь, вопрос эстетики.
Bibo
Аватара
Сообщения: 619

  • 1

Сообщение #351 Bibo » 14.11.2015, 18:56

Отчет о текущем шаге. Архив содержит текстуры, из-за нововведений в структуру.
Реализована замена картинок кран-балкой. Пока без привязки к победам и без сохранения/загрузки. Надо потестить. После того как пятнашки будут верно собраны, над ними более невозможны манипуляции, до перемешивания.
У меня периодически вылетает блендер из-за динамической замены ресурса текстур, думаю это проблема решится, если выход из игры по клавише Esc заскриптить, предварительно освобождая созданные текстуры.

Скрипты в целом получаются страшные и костыльные, с кучей некрасивых if-ов. Собсно, расплата за мой неорганизованный подход, все лепится и придумывается на месте.
Bibo
Аватара
Сообщения: 619

  • 2

Сообщение #352 Mihanik » 14.11.2015, 21:02

Всё отлично, Пока только одно замечание, погрузчик тащит на замену ту картинку какую указано, это правильно, а после замены назад он должен бы тащить не туже самую, а ту что стояла ранее.То есть, указанную картинку он засунул в пятнашки, а ту что стояла вытащил и несёт в шкаф.
Bibo писал(а):Скрипты в целом получаются страшные и костыльные, с кучей некрасивых if-ов. Собсно, расплата за мой неорганизованный подход, все лепится и придумывается на месте.
Полагаю, неорганизованный подход, это наша общая проблема, не имея опыта организации командной работы в игрострое, трудно ожидать чего то другого.Тут всё лепится и придумывается по ходу действия, и от сюда частые переделки. Не было изначально чёткого представления как оно всё должно работать. Первый блин так сказать.
У меня вот с дымом дела идут крайне медленно, кучи вариантов, тестов и ничего толкового.
Спойлер
Изображение
Изображение
То с одного ракурса плохо, то с другого.

Добавлено спустя 5 минут 7 секунд:
Не смотря ка кажущуюся простоту игры, здесь весьма хитрая и запутанная логика, я бы умер программируя )))

Добавлено спустя 1 час 14 минут:
Обнаружена нестыковка:
Если при собранных пятнашках, кончается топливо, и игрок переводит рычаг в положение "мешать", а потом назад, в положение "играть" то после загрузки топлива счётчик продолжает отсчитывать время и пятнашки можно двигать.
Mihanik M
Аватара
Сообщения: 1571

Сообщение #353 Bibo » 14.11.2015, 22:43

Mihanik писал(а):То есть, указанную картинку он засунул в пятнашки, а ту что стояла вытащил и несёт в шкаф.
А мне этот процесс казался чем-то типа чеканки.
Mihanik писал(а):Обнаружена нестыковка:
Если при собранных пятнашках, кончается топливо, и игрок переводит рычаг в положение "мешать", а потом назад, в положение "играть" то после загрузки топлива счётчик продолжает отсчитывать время и пятнашки можно двигать.
Да и правда. Это как раз проявление дыры плохого, спешного решения.
По факту, основная часть игровой механики уже сделана, остальное, это детали интерфейса и настройка физики персонажа, потому я позволю себе отойти от основной работы и попробую переделать текущую писанину в нечто более объективное.
Bibo
Аватара
Сообщения: 619

Сообщение #354 Mihanik » 14.11.2015, 23:31

Bibo писал(а):А мне этот процесс казался чем-то типа чеканки.
В принципе, допустимо чеканка, или покраска по трафарету...
Bibo писал(а):потому я позволю себе отойти от основной работы и попробую переделать текущую писанину в нечто более объективное.
Да, я всё равно за тобой не успеваю, после дыма, мне ещё графическую часть интерфейса надо подготовить.
Mihanik M
Аватара
Сообщения: 1571

Сообщение #355 Bibo » 15.11.2015, 08:49

Mihanik писал(а):В принципе, допустимо чеканка, или покраска по трафарету...
Если допустимо, как делать тогда? Оставлять как есть или все таки менять местами?
Bibo
Аватара
Сообщения: 619

Сообщение #356 Mihanik » 15.11.2015, 20:31

Bibo, Мне всё таки кажется более логичным менять местами.новую засунул, старую унёс.
Mihanik M
Аватара
Сообщения: 1571

Сообщение #357 Mihanik » 17.11.2015, 17:26

Bibo, Вот дым огонь, не скажу что сильно доволен, но пусть будет так.
https://yadi.sk/d/v1bgm7OOkX89Z
Огонь можно поворачивать по оси Х имитируя затухание , разгорание, в зависимости от количества топлива, или скорее от давления пара будет более похоже.
Дым, там 17 объектов, каждый со своей анимацией. С 0 по 6 имитируют пыль от падения угля, остальные дым при открывании дверцы котла. Временный скрипт, управляющий дымом, привязан к котлу, чтоб было понятно, как оно задумывалось.
Mihanik M
Аватара
Сообщения: 1571

Сообщение #358 Bibo » 17.11.2015, 19:49

Мне думается, что пыль от угля не будет заметна в потоке самого угля. Посмотрим.
Bibo
Аватара
Сообщения: 619

  • 3

Сообщение #359 Mihanik » 17.11.2015, 21:58

Ну у меня это как то так выглядит.
Спойлер
Изображение
если генератор срабатывает через два кадра, можно и каждый кадр, но нагрузка на растр и анимацию становится заметной. Можно также увеличить время жизни частицы, это тоже повысит плотность дыма.

Добавлено спустя 6 минут 47 секунд:
Каждый кадр
Спойлер
Изображение
Mihanik M
Аватара
Сообщения: 1571

Сообщение #360 Dero » 18.11.2015, 14:52

Очень круто, красиво!
Dero
Аватара
Сообщения: 87

Пред.След.

Вернуться в Игровой движок Blender

Кто сейчас на форуме (по активности за 5 минут)

Сейчас этот раздел просматривают: 1 гость

cron