Сообщество - Свидетели Godot'овы
Добавить пост

Свидетели Godot'овы

84 поста 277 подписчиков

Популярные теги в сообществе:

Godot4. Particles 2D Collision

Утречко! В какой--то момент сегодня ночью, так опух делать туториал для основного проекта, играть давно уже не во что не тянет, ну и решил поиграть немножко с Godot4, заодно хоть глянуть как там дела то движутся у ребят. Дела движутся весьма хорошо, что радует)

Ну и вообщем как-то само собой получилось, набросал за три часика небольшую демку, может быть даже продолжу её, давно хотелось сделать казуальный платформер и чтобы стрельба была как в червячках, в мыслях была конечно игра за лучника, но тут попался на глаза ассетпак тайлов и в нем маг бонусом, ну думаю маг в целом ничем не хуже. Видосик тяжелый получился, залил на ютуб.
https://www.youtube.com/watch?v=4bQX1VUDhsI&ab_channel=Boogernator

Мне нравится, ярко, бодро жизнерадостно, но что ещё мне больше понравилось, это фишечка с коллизиями у партиклов, давно хотел затестить, но руки как-то не доходили. Сейчас в общих чертах постараюсь показать и рассказать что к чему, но анимашечки такая штука, тяжело скриншотами это делать, хз может действительно собраться как-нибудь, да видос записать уже.

Но пока так. Сразу есть какой нюанс, коллизии партиклов работают не с физическими моделями, как можно было бы предположить, они взаимодействуют с LightOccluder, в 3D вроде нет, но не ручаюсь, в 2D точно так, хз временно ли это сделано или всегда так будет, с одной стороны вроде и не удобно, а с другой пофигу. На примере тайлмапа покажу, с обычным окклюдером там все просто. Хотя и с тайлмапом тоже.

Godot4. Particles 2D Collision Gamedev, Инди, Godot, Godot Engine, Видео, YouTube, Без звука, Длиннопост
Godot4. Particles 2D Collision Gamedev, Инди, Godot, Godot Engine, Видео, YouTube, Без звука, Длиннопост

быстренько стряпаем незамысловатый взрыв и выбираем для этой частицы Hide On Contact
При касании частица будет исчезать, что впрочем очевидно из названия.

Godot4. Particles 2D Collision Gamedev, Инди, Godot, Godot Engine, Видео, YouTube, Без звука, Длиннопост
Godot4. Particles 2D Collision Gamedev, Инди, Godot, Godot Engine, Видео, YouTube, Без звука, Длиннопост

тут два события для левой и правой кнопки мыши

Godot4. Particles 2D Collision Gamedev, Инди, Godot, Godot Engine, Видео, YouTube, Без звука, Длиннопост

скрипт для обеих сцен с партиклами

Godot4. Particles 2D Collision Gamedev, Инди, Godot, Godot Engine, Видео, YouTube, Без звука, Длиннопост

код для сцены Main

Godot4. Particles 2D Collision Gamedev, Инди, Godot, Godot Engine, Видео, YouTube, Без звука, Длиннопост

Ну и собственно результат.

Как видите синие исчезают, а красненькие скачут родимые. Хз чего видос так тормозит после заливки, в mp4 нормально все показывается. Впрочем лучше сами проверьте, работает все очень шустренько и бодренько.


Спасибо за внимание.

Показать полностью 7 1

Godot. Ищем потерянные ноды

Утречка! Давно ничего не писал, были причины. Немножко расскажу, так получилось что 31го декабря, за несколько часов до НГ мы взяли и релизнулись. Не скажу что это эпохальное событие, игра и сейчас сырая, но в целом даже на довольно нишевой платформе более 2000 юзеров, какой-никакой ретеншн и длина сессии очень больше 15 минут, что очень даже неплохо. Это небольшой айдл, приложу маленький видосик с процессом.

Не буду тут рассказывать что это несет великую ценность для геймдева, но для меня как Godot-разработчика большая веха. Полностью кроссплатформа, один билд собирается и в apk и html5, который более менее ровно работает и на пк и с мобилки, наподключали всего чего только можно и appsflyer с devtodev и платежку и рекламу, в качестве бекенда используем Nakama, офигенная вещь и с Godot работает прекрасно, даже есть свой самописный сервер на Godot, мы его используем теперь для сбора своей статистики на этапе загрузки html через вебсокет. Брат у меня из геймдизайнера прям матерым линкусоидом стал, докеры там какие-то разворачивает на VPS, и интерфейсы ваяет, я больше все же клиентской логикой занимаюсь.

Короче это я к чему, Godot офигенно работает во всем, но кривые ручки разработчика могут все подпортить. Самое всеми любимое это конечно же - Утечки памяти, они же Memory Leak.

Как я напортачил сильно не буду углубляться, там очень много кода придется демонстрировать, но это из-за разлетающихся конечностей получилось, эффект прикольный и сделал его быстро, буквально за вечер, но потом долго искал и правил)

Из-за чего может получиться, самое простое и частое, это remove_child вы вызвали, а queue_free() для ноды не вызвали, вот и болтается она в памяти неприкаянная, в языках со сборщиком мусора типа Java, AS3 и тп, они бы почистились в определенный проход, но в Godot нету сборщика мусора, так что лучше не расслабляться. Покажу на немножко утрированном примере, но он практически идентичен тому, как сам натолкнулся на эту проблему и уже начал проверять.

Маленькая ремарка - знакомый играл сказал что на третьем часу игры у него начали подтормаживания, я потом затестил там больше 300000 объектов в памяти накапливалось, что конечно плюс Godot, но минус моим кривым рукам.

Ну ладно меньше текста, немножко покодим, для примера возьму ещё одну полезную в хозяйстве вещь такую как HTTPRequest. Начну прям с этого туториала.
https://docs.godotengine.org/en/stable/tutorials/networking/http_request_class.html#preparing-scene

Сцена

Godot. Ищем потерянные ноды Godot, Godot Engine, Gamedev, Инди, Видео, Вертикальное видео, Длиннопост

Скрипт

Godot. Ищем потерянные ноды Godot, Godot Engine, Gamedev, Инди, Видео, Вертикальное видео, Длиннопост

Все хорошо работает, но есть одно но, если быстро кликнуть на кнопку, появится ошибка.
Потому что предыдущий запрос не успел выполнится, а уже новый шлём.

Godot. Ищем потерянные ноды Godot, Godot Engine, Gamedev, Инди, Видео, Вертикальное видео, Длиннопост

А нам вот надо кровь из носу слать сколько угодно запросов, задудосить может хотим кого(Осуждаю), идем в следующий тутор.
https://docs.godotengine.org/en/stable/classes/class_httprequest.html#class-httprequest

Переписываем код, чтобы при нажатии на кнопку спавнился новый реквест и уже он пускай и отрабатывает, подправим немножко код.

Godot. Ищем потерянные ноды Godot, Godot Engine, Gamedev, Инди, Видео, Вертикальное видео, Длиннопост

Вроде бы все как надо, но теперь появилась другая проблема.

Godot. Ищем потерянные ноды Godot, Godot Engine, Gamedev, Инди, Видео, Вертикальное видео, Длиннопост

И все как бы логично, мы же создаем новые реквесты, но никуда их не деваем, они свое сделали и висят балластом. Блин не могу найти странное решение, которое видел на форуме, но оно сводилось к удалению всех потомков на сцене. Не суть, напишу сейчас похожее, внимание не повторяйте это. Но для образовательных целей пойдет. Заодно ознакомимся с очень замечательным методом print_stray_nodes()

Godot. Ищем потерянные ноды Godot, Godot Engine, Gamedev, Инди, Видео, Вертикальное видео, Длиннопост

потыкаем на кнопочку 10 раз пока она не пропадет и посмотрим на результат.

Godot. Ищем потерянные ноды Godot, Godot Engine, Gamedev, Инди, Видео, Вертикальное видео, Длиннопост

В профайлере появились беспризорные ноды, у которых нет родителей. Подмывает Лилу с футурамы вставить, тренд же, но не буду. Вообщем это самое первое смотрите всегда, если чувствуете что проекту плохеет со временем, ну и теперь глянем что же показывает тот чудесный метод.
а тут список всех потерянных нод с именами, можно даже наколхозить свой сборщик мусора и периодически вызывать это в проекте, чтобы чистить потеряшек, но я этого делать не буду и вам не советую используйте class_name для своих нод, они тут будут нормальные названия иметь, найти утечку уже дело плевое совсем.

Godot. Ищем потерянные ноды Godot, Godot Engine, Gamedev, Инди, Видео, Вертикальное видео, Длиннопост

Вот такие дела, пользуйтесь на здоровье.

Ну наверное может у тех кто только осваивает ещё все это дело возникнуть вопрос, а как по уму то сделать, чтобы удалялись только неиспользуемые?

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

Я покажу пример попроще и он расширит удобство сигналов заодно, мало-ли кто не знает, что так тоже можно)

Godot. Ищем потерянные ноды Godot, Godot Engine, Gamedev, Инди, Видео, Вертикальное видео, Длиннопост

Ну и скрин профайлера

Godot. Ищем потерянные ноды Godot, Godot Engine, Gamedev, Инди, Видео, Вертикальное видео, Длиннопост

Вот таким нехитрым образом можно получить доступ к сцене которая вне зоны видимости, может где и пригодится кому, способ простой. Я его использовал для пулек, ну потому что у нас в проекте не используется физика и коллизии, пулька летит в заранее просчитанное место столкновения, все по прямой же движутся)

Всем спасибо за внимание.

P.s. Жена занялась Cutout анимацией, немножко в кодинг тоже начала тыкаться. Так что очень возможно запилю серию новичковую заново с более продуманным планом. Опыта опять же прибавилось, какие-то вещи пересмотрел, в каких-то укоренился напротив, все во благо скорости. Пусть и не топовый программист, но за три дня могу сделать любой прототип и 90% работы, а потом уже месяцами делать оставшиеся 90% работы)

Показать полностью 10

Godot. Немножечко про шейдеры и BackBufferCopy

Всем привет. Столкнулся с одной проблемой, поделюсь найденным решением.

Решаемая задача: надо применить шейдерный эффект не на одиночный спрайт, а на группу спрайтов(например cutout анимация или сложносоставная иконка в интерфейсе)
Для примера возьму этот эффект
https://godotshaders.com/shader/teleport-effect/

Работает хорошо, эффект симпатичный

Godot. Немножечко про шейдеры и BackBufferCopy Gamedev, Инди, Godot, Godot Engine, Видео, Без звука, Длиннопост
Godot. Немножечко про шейдеры и BackBufferCopy Gamedev, Инди, Godot, Godot Engine, Видео, Без звука, Длиннопост

Но тут мы получим не совсем ожидаемый результат.

По любому мы должны брать SCREEN_TEXTURE, чтобы получить желаемое.

Godot. Немножечко про шейдеры и BackBufferCopy Gamedev, Инди, Godot, Godot Engine, Видео, Без звука, Длиннопост

В принципе уже похоже на правду, но тут есть одно маленькое НО..
Если на экране будет ещё и текстура фона, то шейдер будет применяться и к ней.

Godot. Немножечко про шейдеры и BackBufferCopy Gamedev, Инди, Godot, Godot Engine, Видео, Без звука, Длиннопост

Вот на скрине наглядно видно, что он ещё и подложку вместе со спрайтами "телепортирует"

Если честно долго голову ломал и очень конечно дикий велосипед написал, чтобы этого избежать, а все оказалось гораздо проще. В Godot есть специальная нода для этих случаев.
BackBufferCopy
https://docs.godotengine.org/en/stable/classes/class_backbuf...

собственно, она позволяет использовать SCREEN_TEXTURE в шейдере, но для конкретного и нужного региона.

Godot. Немножечко про шейдеры и BackBufferCopy Gamedev, Инди, Godot, Godot Engine, Видео, Без звука, Длиннопост
Godot. Немножечко про шейдеры и BackBufferCopy Gamedev, Инди, Godot, Godot Engine, Видео, Без звука, Длиннопост

И радуемся полученному результату, теперь телепортируется не одиночный спрайт, а вся группа объектов сразу, что собственно и было нужно.

Так же замечательно это будет работать и с TextureRect и с текстом в контролах.

Спасибо за внимание.
Небольшой но уютный чатик сообщества, если есть вопросы заходите.
https://t.me/Godot_pikabu

Показать полностью 6 4

Godot. Static, Tool и два Enums'a

Всем привет, редко писать стал, погряз в трудах праведных времени свободного мало. Сейчас в основном занимаюсь обвязкой для метагейма, апгрейды, покупки и т.д. Ну и открыл для себя немало удобных штук, думаю надо поделиться своими соображениями с сообществом.

Да, под  метагеймом я подразумеваю не MostEffectiveTactic, а абстрагированное развитие прогресса игрока, вне основной геймплейной сессии.


А потому в этом посте, будет простенькое хранение игровой валюты, отображение её на экране и кнопочка с помощью которой можно будет потратить эту валюту)
Создал пустой проект, в которых запихнул три иконочки.

Godot. Static, Tool и два Enums'a Gamedev, Godot Engine, Godot, Видео, Длиннопост

Перво наперво надо её где-то хранить, запилим CurrencyStorage. Можно это конечно сделать синглтоном или ещё как, но в этом случае я сделаю, используя статичные функции, меня недавно распрашивали насчет них, кому-то видимо нужно и может пригодится, да и сам я ими пользуюсь в различных Utils классах.
Важное замечание, в gdscript есть статичные функции, но нет статичных переменных, что с одной стороны странно и неудобно, с другой стороны хорошо) Но эту неприятность легко можно обойти, например в константе хранить массив, словарь или свой пользовательский класс.

Использую словарик.

Godot. Static, Tool и два Enums'a Gamedev, Godot Engine, Godot, Видео, Длиннопост

Обратите внимание, что класс CurrencyStorage, ни отчего не наследуется, его экземпляров мы создавать не будем, при попытке запихать его в AutoLoad будет ошибка.

Ну ладно. проверим что все работает как надо

Godot. Static, Tool и два Enums'a Gamedev, Godot Engine, Godot, Видео, Длиннопост

Теперь сделаем универсальный Label, который будет показывать не только количество, но и содержать в себе иконку валюты.

Godot. Static, Tool и два Enums'a Gamedev, Godot Engine, Godot, Видео, Длиннопост

Сейчас можно расставить наши IconLabel в сцене Main, запустить и игра упадет.

Связано это с порядком выполнения методов _ready() в дочерних и родительских нодах, а если помните то CurrencyStorage.store() я поместил именно в _ready.
Кстати непонимание этой разницы вызывает немало ошибок у новичков, поверьте я знаю с двумя новичками и сотрудничаю сейчас.
метод _ready() это не конструктор, он вызывается когда экземпляр уже добавился на сцену в результате add_child(). Конструктор, который вызывается при создании экземпляра это _init()
И порядок выполнения следующий:
parent -> _init()
child -> _init()

...

child -> _ready()

parent ->_ready()


_init родителя вызывается раньше чем _init потомка, но добавляются на сцену они в обратном порядке, что в принципе очень даже логично)
Перенесем загрузку стартовых данных в _init()

Godot. Static, Tool и два Enums'a Gamedev, Godot Engine, Godot, Видео, Длиннопост

Для каждой IconLabel не забудьте указать разный тип. И я кстати косякнул, два раза в match указал Gold, вместо Silver.

Godot. Static, Tool и два Enums'a Gamedev, Godot Engine, Godot, Видео, Длиннопост

Собственно результат при запуске.

Godot. Static, Tool и два Enums'a Gamedev, Godot Engine, Godot, Видео, Длиннопост

В редакторе же мы видим далеко не такую красоту, там тлен и пустота.

Godot. Static, Tool и два Enums'a Gamedev, Godot Engine, Godot, Видео, Длиннопост

Согласитесь очень неудобно, ведь надо же не только вывести, но и красиво расставить.

Для этого воспользуемся ключевым словом tool.

Godot. Static, Tool и два Enums'a Gamedev, Godot Engine, Godot, Видео, Длиннопост

собственно результат

Godot. Static, Tool и два Enums'a Gamedev, Godot Engine, Godot, Видео, Длиннопост

Картинками не показать, что меняется в редакторе, вот видосик держите.

Наберет если пост 15 лайков, то напишу и продолжение про пользовательскую кнопку для покупок за валюту, и покупке валюты за рубли)) Тонкий байт на лайки, эндорфинов не хватает, а каждый лайкосик дает немало)

Ну и ссылка на чатик сообщества в тг https://t.me/Godot_pikabu
Можно позадавать или поотвечать на вопросы или просто пофлудить, но без троллинга и токсичности плз.


p.s. А иногда tool не сразу почему-то работает после добавления его в скрипт, бывает нужно релоаднуть проект.

Godot. Static, Tool и два Enums'a Gamedev, Godot Engine, Godot, Видео, Длиннопост
Показать полностью 11 1

Godot. Unique Scene Name

Всем привет, затрону один важный момент касающийся организации кода. По моим наблюдениям новички туторами обмажутся, а потом у них возникают проблемы, а все из-за использования абсолютных путей. Я про два конкретных способа get_parent() и get_node().

Создам тестовый проект для наглядности.

Godot. Unique Scene Name Gamedev, Инди, Godot, Godot Engine, Видео, YouTube, Длиннопост

Вроде бы все хорошо, никаких проблем нету, мы же ничего не собираемся менять никогда в структуре этой сцены<sarcasm> 100% можно быть уверенным только в одном, что изменения будут, в геймдеве особенно)
Немножко изменим структуру сцены.

Godot. Unique Scene Name Gamedev, Инди, Godot, Godot Engine, Видео, YouTube, Длиннопост

Если уж хотите все одно таким образом обращаться к нодам или сценам нужным, то Godot предоставляет очень удобный инструмент.

Godot. Unique Scene Name Gamedev, Инди, Godot, Godot Engine, Видео, YouTube, Длиннопост

Теперь для помеченных таким образом сцен не нужно указывать абсолютный путь, годот все сделает за вас. get_parent() почти всегда порочная практика, в конце поста покажу один пример)

Если потомку надо знать своего родителя, то пусть родитель и сообщает ему об этом.

Godot. Unique Scene Name Gamedev, Инди, Godot, Godot Engine, Видео, YouTube, Длиннопост
Godot. Unique Scene Name Gamedev, Инди, Godot, Godot Engine, Видео, YouTube, Длиннопост

Все теперь можно их перетаскивать по сцене как угодно, уже ничего не сломается.

Особенно это удобно при создании GUI, адаптивный интерфейс как правило требует много разнообразных вложений и родительских сцен, чтобы все там само красивенько расползалось по экрану, с таким подходом сэкономите себе кучу нервов и времени)

И обещанное про get_parent()
Для наглядности в _physics_process добавил 3 get_parent()

на картинке ниже видно, что _physics_process выполняется на 30% дольше чем _velocity_computed

Godot. Unique Scene Name Gamedev, Инди, Godot, Godot Engine, Видео, YouTube, Длиннопост

А теперь скрин профайлера без этих 3-х get_parent()

Godot. Unique Scene Name Gamedev, Инди, Godot, Godot Engine, Видео, YouTube, Длиннопост

Как видите на 25% быстрее стал выполняться, чем _velocity_computed
Если вам кажется что это пустяк, то вот видосик. Ролик коротенький, но 60мб получился, заль. ютуб. В первом случае у меня фпс начинал падать ниже 60 уже после спавна 600 человечков, во втором это число выросло до почти 2100.

https://youtu.be/jd3pMYHGYYM

Всем спасибо за внимание.
Небольшой и уютный чатик нашего сообщества https://t.me/Godot_pikabu

Частенько действительно полезные вещи подсказывают, удобно, с любым затупом можно просто спросить))

Показать полностью 7 1

Godot. Particle Library

Всем привет, давно ничего не писал, времени не было) Произошло много событий, даже слишком)) Я накосепорил преизрядно, натворил делов недобрых, после этого меня ещё и с работы выгнали, так что теперь я в статусе безработного бомжа) Но есть плюс, я был у невролога и психиатра, прописали мне таблов. И заодно закодировался, так что ближайшие полгода алкопостов не будет) Ну это одна причина почему не писал долго.

Вторая причина. В чатике сообщества организовались с парнями и поучаствовали в джеме.
@Noizless.dog, @inar0s, @xenofob, привет, ещё и тут)

Godot. Particle Library Godot, Godot Engine, Инди, Gamedev, Видео, Без звука, YouTube, Длиннопост

За три дня успели сделать в целом играбельный продукт, хоть и не до конца, сейчас понемножку полируем ещё. Поиграть можно тут.
https://itch.io/jam/sibgamejam-nov-2022/rate/1779990

Сильно заострять внимание на это не буду, позже будет отдельный разбор, по нашим ошибкам в ходе разработки)

А сегодня хотел написать вот о чем. Вот такой эффектик сделал для поверапа в игре, батарейку пополняет. Как по мне прикольный получился)

Ну и была мысль расписать, как его сделать, а потом думаю, как делать партиклы я уже писал, тут все тоже самое, проще поделиться сразу готовой реализацией, ну и сделал публичную репу на гитхабе)) А то мне уже скоро 40, а ни одного опенсорсного проекта не сделал ещё, что я за разработчик такой))

Немножко о том как все устроено в репозитории.
ссылка на сам репозиторий.
https://github.com/JunkyRoach/GodotParticleLibrary
Пока всего два эффекта, ну я потерял приличную библиотеку своих поделок, теперь сразу буду делать здесь, коммитить, а потом уже в рабочие проекты свои переносить. Так что если кому надо пользуйтесь. Потихоньку буду наполнять.


Вот собственно пока и все. Спасибо за внимание.
Залетайте в чатик сообщества https://t.me/Godot_pikabu
Много нового узнать можно, мне хоть разъяснили разницу между _input() и _unhandled_input()
Ну и как оказалось, найти единомышленников, чтобы создавать крутые игры, а иначе зачем вся эта возня с Godot.

Показать полностью 1 2

Godot. Путь Алкаша.VisibilityNotifier2D

Всем привет, я буду сразу в заголовке указывать, чтобы было понятно, в какую сторону содержимое скатится)
Но тут прям и тематика подходит как раз, кода будет, самый минимум, все как я люблю)

Не помню писал про эту ноду или нет, но даже если и писал, повториться будет не зазорно. Очень удобная и утилитарная нода.
https://docs.godotengine.org/ru/stable/classes/class_visibil...

Разбирать буду сразу на примере реальной задачи, как делаю для себя. Без всяких там ужимок про хороший код и тд, для себя я знаю приблизительно конечную цель, чего мне лишний раз потеть.


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

Godot. Путь Алкаша.VisibilityNotifier2D Godot, Godot Engine, Gamedev, Инди, Видео, Без звука, Длиннопост, Мат

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


Но можно сделать проще и спавнить объекты, только тогда, когда ещё не видно крыши и игрок не видит источник спавна, но его наличие там подразумевается. Так и в реальности обычно происходит, окурок падает, голову поднимешь, а там уже и нет никого.


Ну хватил лирики, начну делать.

Godot. Путь Алкаша.VisibilityNotifier2D Godot, Godot Engine, Gamedev, Инди, Видео, Без звука, Длиннопост, Мат

Теперь доработаем сцену до нужных кондиций и проверим.

Godot. Путь Алкаша.VisibilityNotifier2D Godot, Godot Engine, Gamedev, Инди, Видео, Без звука, Длиннопост, Мат

Переходим на закладку сигналы.

Godot. Путь Алкаша.VisibilityNotifier2D Godot, Godot Engine, Gamedev, Инди, Видео, Без звука, Длиннопост, Мат

Теперь подвяжем сигналы к скрипту.

Godot. Путь Алкаша.VisibilityNotifier2D Godot, Godot Engine, Gamedev, Инди, Видео, Без звука, Длиннопост, Мат

Так же делаем со вторым сигналом.

Godot. Путь Алкаша.VisibilityNotifier2D Godot, Godot Engine, Gamedev, Инди, Видео, Без звука, Длиннопост, Мат

Кода минимум, но это эталонная реализация паттерна Observer, ладно проверим, работает или нет.

Ну и максимально быстро тогда покажу код бутылки, не буду сейчас доделывать коллизии, просто пусть вниз падает.

Godot. Путь Алкаша.VisibilityNotifier2D Godot, Godot Engine, Gamedev, Инди, Видео, Без звука, Длиннопост, Мат

И код фабрики, тут будет с небольшим изъебом, это задел на следующий пост оставлю.

Godot. Путь Алкаша.VisibilityNotifier2D Godot, Godot Engine, Gamedev, Инди, Видео, Без звука, Длиннопост, Мат

Все у меня уже мысли путаются и на одной картинке сложно объяснить все что хотел, код тоже простой, таймер спавнит сигнал, если сейчас  видно фабрику, то ничего не спавнится, и наоборот.
Почему поставил ноду таймер, а не указал время спавна в export var?? Да просто так меньше кода. Ну и там в рандомном диапазоне выбирается позиция по x для бутылки, проще уже некуда казалось бы) Но на самом деле, пока писал, понял что можно ещё проще, просто по сигналу нотифаера стопать таймер, а потом снова включать, ещё меньше кода будет.

Я побольше акцентировал внимание на сигналах, да просто потому что это кайфовая тема, событийно-ориентированное программирование, на мой взгляд наилучшим образом подходит для геймдева, оно логичное и понятное, оно очень понятно даже далеким от программирования людям. Ну и я не использую никаких IDE, да просто потому что базовый редактор, он гораздо больше подходит для удобочитаемости кода. Да тут я кликнул два раз мышкой и вижу зеленые фитюльки, мне они нагляднее и понятнее чем self.connected(self.... и уж это гораздо понятнее новичкам. Засим прощаюсь, всем GODOT!!

Если есть вопросы, пожелания то велкам в чатик сообщества. https://t.me/Godot_pikabu
Впрочем сейчас он превращается в спонтанный чат разработки pve-coop_платформера в 3D на базе Godot, но там есть по настоящему умные люди, которые могут подсказать дельные вещи.

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

Показать полностью 8 2

В Питере шаверма и мосты, в Казани эчпочмаки и казан. А что в других городах?

Мы постарались сделать каждый город, с которого начинается еженедельный заед в нашей новой игре, по-настоящему уникальным. Оценить можно на странице совместной игры Torero и Пикабу.

Реклама АО «Кордиант», ИНН 7601001509

Ответ на пост «Помогите пожалуйста»

Всем привет, особенно @nazirmustafin773, в целом тебе ответили на вопрос, главная ошибка была в том что отступ не поставил.


Я когда начал изучать Python и впоследствии GDS, мне сложно было порой с этими отступами, да и сейчас бывает косячу, что поставлю неправильно, а у меня вся логика рушится вместе с этим.

Я использовал pass, как завершение условия или цикла, да оно не нужное, но я для личного удобства это ставил, просто чтобы самому не косячить и не ошибаться, а потом уже привык, да и не просто привык, а втянулся и оценил преимущество этого подхода на отступах))

Ответ на пост «Помогите пожалуйста» Godot, Картинка с текстом, Gamedev, Видео, Без звука, Ответ на пост, Длиннопост

Ну и немножечко к передвижению, добавлю вариант один, которым сам пользуюсь, да и в комментах тебе его предложили, но он там внизу вдруг не заметил)


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

Ответ на пост «Помогите пожалуйста» Godot, Картинка с текстом, Gamedev, Видео, Без звука, Ответ на пост, Длиннопост

Вот собственно и все, для KinematicBody, суть та же самая, ну может попозже напишу и для него.

А в целом, как раз для таких вопросов и создали группу. https://t.me/Godot_pikabu
За 5 минут бы тебе ответили, не пришлось бы и заморачиваться с постом, опять же люди там поумнее меня имеются, просто не все готовы посты писать)
Но в целом, как тебе удобнее так и задавай вопросы, новичком быть не стыдно. Стыдно троллить новичков, пряча буллинг за псевдоюмором и сарказмом.

Показать полностью 2 1
Отличная работа, все прочитано!