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

Board index Геймдев в Blender Игровой движок Blender

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

  • 1

Post #341by Bibo » 10.11.2015, 17:04

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

UPD: забыл добавить, на Z теперь увеличивается зум камеры. Понадобилось, иначе сложно было разглядеть уровень давления на манометре.
Last edited by Bibo on 10.11.2015, 19:17, edited 3 times in total.
Bibo
Avatar
Posts: 612

Post #342by Mihanik » 10.11.2015, 18:30

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

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

Code: Select all
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
Avatar
Posts: 1571

  • 1

Post #343by Bibo » 11.11.2015, 09:44

Mihanik,
Code: Select all
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 wrote:И оно двигает все UV карты, все текстуры. Что изменить, что бы двигалась только одна текстура?
А как вообще двигать текстуру? Текстура двигаться не может, можно только установить координаты вершины на этой текстуре.

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

  • 1

Post #344by 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
Avatar
Posts: 62

  • 1

Post #345by Bibo » 11.11.2015, 19:41

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

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

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

UPD: собрать таки получилось трижды. Хотя был момент, когда я отчаялся
Image
Last edited by Bibo on 11.11.2015, 22:37, edited 1 time in total.
Bibo
Avatar
Posts: 612

Post #346by Mihanik » 11.11.2015, 21:48

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

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

Added after 11 minutes 39 seconds:
Bibo wrote:А как вообще двигать текстуру? Текстура двигаться не может, можно только установить координаты вершины на этой текстуре.
Ну к примеру так
Image
Эта штука двигает именно конкретную текстуру а не всю UV и параметр в принципе анимируется, если бы это ещё и в БГЕ работало, всё было бы на много проще.
Mihanik M
Avatar
Posts: 1571

Post #347by Bibo » 12.11.2015, 10:42

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

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

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

Mihanik wrote:Ну к примеру так
А на что, в данном случае, влияет параметр Z?
Bibo
Avatar
Posts: 612

Post #348by Mihanik » 12.11.2015, 12:23

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

Added after 3 minutes 51 second:
Собственно это и есть координаты текстуры, а не вершин развёртки, как я это понимаю.
Mihanik M
Avatar
Posts: 1571

Post #349by Mihanik » 12.11.2015, 15:42

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

Post #350by Bibo » 12.11.2015, 16:11

Mihanik wrote:Процесс перемешивания тоже можно прервать, если это не сильно усложнит код.
Да я вроде постарался, чтобы не сильно усложнял, но как это будет выглядеть? Допустим, экран начал открываться после перемешивания, но игрок решил сменить картинку и экран резко дергается в обратном направлении, чтобы снова закрыться. То бишь, вопрос эстетики.
Bibo
Avatar
Posts: 612

  • 1

Post #351by Bibo » 14.11.2015, 18:56

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

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

  • 2

Post #352by Mihanik » 14.11.2015, 21:02

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

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

Added after 1 hour 14 minutes:
Обнаружена нестыковка:
Если при собранных пятнашках, кончается топливо, и игрок переводит рычаг в положение "мешать", а потом назад, в положение "играть" то после загрузки топлива счётчик продолжает отсчитывать время и пятнашки можно двигать.
Mihanik M
Avatar
Posts: 1571

Post #353by Bibo » 14.11.2015, 22:43

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

Post #354by Mihanik » 14.11.2015, 23:31

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

Post #355by Bibo » 15.11.2015, 08:49

Mihanik wrote:В принципе, допустимо чеканка, или покраска по трафарету...
Если допустимо, как делать тогда? Оставлять как есть или все таки менять местами?
Bibo
Avatar
Posts: 612

Post #356by Mihanik » 15.11.2015, 20:31

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

Post #357by Mihanik » 17.11.2015, 17:26

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

Post #358by Bibo » 17.11.2015, 19:49

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

  • 3

Post #359by Mihanik » 17.11.2015, 21:58

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

Added after 6 minutes 47 seconds:
Каждый кадр
Spoiler
Image
Mihanik M
Avatar
Posts: 1571

Post #360by Dero » 18.11.2015, 14:52

Очень круто, красиво!
Dero
Avatar
Posts: 87

PreviousNext

Return to Игровой движок Blender

Who is online (over the past 5 minutes)

Users browsing this forum: 1 guest