Gamedev

Ответить в тред Ответить в тред
Godot #19 Аноним # OP 10/09/20 Чтв 16:17:25 6980541
1599743830052.png 1552Кб, 1700x1700
1700x1700
Добро пожаловать в тред любви, взаимопомощи и форматирования отступами!

Ссылки
Скачать движок: https://godotengine.org/download/ или http://store.steampowered.com/app/404790/Godot_Engine/
FAQ: https://docs.godotengine.org/ru/latest/about/faq.html
Документация: https://docs.godotengine.org/ru/latest/ https://docs.godotengine.org/en/stable/
Примеры качаются прямо в движке через свой магазин в отдельной вкладке AssetLib. Там есть всё - от платформера до чата.
Игры, созданные глобальными кириллами: https://steamcommunity.com/app/404790/discussions/0/412448792354265655/
Изумительный Годот: https://github.com/Calinou/awesome-godot - подборка дополнений, модулей и минишоукейс от одного из авторов.

Годнота от анона
- Для приверженцев опенсорца существует возможность распространять проекты в незапакованном формате. Просто скачай темплейт с оф.сайта и положи экзешник/эльфешник в папку с проектом, этого достаточно. Дополнительно можешь вшить свою иконку в экзешник. После этого, запустившийся файл темплейта обнаружит рядом с собой файл project.godot и начнет грузить проект из него и из файлов, лежащих в распакованном виде в той же директории.
- В версии 3.2 появилась возможность прикреплять pck к бинарнику. Бриллиант для любителей однофайлового продукта!
- Редактор персонажей на основе makehuman: https://github.com/Lexpartizan/Go_MakeHuman_dot
- Тест-бенчмарк:
- - Веб-версия - https://govdot.herokuapp.com
- - Вишмастер для винды - https://govdot.herokuapp.com/4Anon.rar

Предыдущий тонет там: >>681839 (OP)

Архивы:
1 https://arhivach.ng/thread/207802/
2 https://arhivach.ng/thread/388500/
3 https://arhivach.ng/thread/388501/
4 https://arhivach.ng/thread/388502/
5 https://arhivach.ng/thread/388503/
6 https://arhivach.ng/thread/432708/
7 https://arhivach.ng/thread/433902/
8 https://arhivach.ng/thread/436355/
9 https://arhivach.ng/thread/455461/
10 https://arhivach.ng/thread/479963/
11 https://arhivach.ng/thread/489815/
12 https://arhivach.ng/thread/494513/
13 https://arhivach.ng/thread/515567/
14 https://arhivach.ng/thread/533171/
15 https://arhivach.ng/thread/555441/
16 https://arhivach.ng/thread/592945/
17 https://arhivach.ng/thread/592946/
Аноним 10/09/20 Чтв 17:10:38 6980682
>>698054 (OP)
> В версии 3.2 появилась возможность прикреплять pck к бинарнику. Бриллиант для любителей однофайлового продукта!
Кстати на TWG не сработало, некогда было разбираться почему.
Аноним 10/09/20 Чтв 17:41:07 6980773
Аноним 10/09/20 Чтв 17:43:54 6980804
>>698077
Нет, винда. Мне даже кажется один раз запустилось, но больше ни разу, и ни у кого.
Аноним 10/09/20 Чтв 18:01:17 6980855
Есть годные примеры по изометрическим рпг?
Аноним 10/09/20 Чтв 18:40:24 6980916
Аноним 10/09/20 Чтв 19:04:15 6980977
>>698080
Чё за игра? На недавнем ТВГ? Там вроде как не было игр на годоте?
Аноним 10/09/20 Чтв 19:18:49 6980998
>>698097
Чего? Полно было.
Аноним 10/09/20 Чтв 19:27:13 6981009
>>698099
Чегоо? Серьёзно? А куда делись все участники с прошлых ТВГ?
Аноним 10/09/20 Чтв 19:30:31 69810210
>>698100
А куда делся двач в 2009?
Аноним 10/09/20 Чтв 19:54:44 69811511
Ебашу сейчас стейтмашину на гдскрипт. Почувствовал, что доразвился до реализации собственной стейтмашины. Состоит она из трёх классов:
1. собственно сама машина (FSM)
2. класс-состояние (state)
3. класс-передача (transition)
Все классы наследуются от Reference, то есть, это не ноды и не могут входить в дерево сцены. И разумеется, у них нет коллбэков к мэйнлупу.
Машина содержит в себе массив состояний и массив передач.
Передача содержит в себе ссылки на состояние-откуда и состояние-куда.
Класс-состояние содержит в себе функции start, stop и update. Состояние это базовый класс с пустыми функциями, в си, это был бы абстрактный класс, требующий наследовать от него специализированных потомков с реализацией этих функций.
Алгоритм работы таков. У машины есть своя функция update, которая пробегает по массиву состояний, чекает у них внутреннюю переменную mode которая enum { Active, Idle } и у найденных активных выполняет их функцию update.
Каждая передача создаётся с обязательным указанием ссылок на состояния, и при своём создании подписывается на их сигналы activated и finished, которые сигналы излучают при переходе из режима в режим. Соответственно, при переходе состояния в idle состояние излучает finished и если в какой либо из передач оно указано состоянием-откуда, оно активирует эту передачу, а она активирует состояние-куда согласно своему режиму либо сразу, либо ждёт, когда то состояние будет idle. Можно запрограммировать машину так, что из одного состояния будет выходить несколько передач к другим состояниям, активируя их одновременно. Это несколько расходится с классическим определением конечного автомата, который должен иметь одно активное состояние в единицу времени, но звучит интригующе.
Я предполагаю использовать данную машину, объявляя её переменной, а затем вручную вызывая у неё update там, где мне надо, когда по таймеру, когда в _process.
Программирование машины пока что предполагается из кода, без каких бы то ни было визуальных компонентов. Создаются состояния-потомки, реализующие требуемый функционал. Объявляется машина, объявляются состояния, в машину специальной функцией добавляются передачи вместе с состояниями. Стартовому состоянию выставляется режим Active и начинает вызываться update из машины, как описано выше, по требованию.
Если всё получится, то следующим шагом прикручу конфигурирование из текстового конфига.
В чём вопрос? Спросишь ты. Этот пост скорее минидиздок для себя, чтобы собрать мысли в кучу.
Аноним 11/09/20 Птн 02:11:57 69816412
>>698115
>передача
Сцук, ты там что, коробку передач в автомобиль проектируешь?
Transition == Переход.
Аноним 11/09/20 Птн 02:17:28 69816513
>>698115
И да, я не сильно вникал в твою писанину, но навскидку, вот это:
>которая пробегает по массиву состояний, чекает у них внутреннюю переменную mode которая enum { Active, Idle } и у найденных активных выполняет их функцию update.
и вот, это:
>Можно запрограммировать машину так, что из одного состояния будет выходить несколько передач к другим состояниям, активируя их одновременно.
выглядят, как крайне хреновые идеи.
-------
>Это несколько расходится с классическим определением конечного автомата, который должен иметь одно активное состояние в единицу времени, но звучит интригующе.
Это звучит так, что ты наебешься, когда будешь делать отладку этого франкенштейна. Не трахай себе мозг и делай отдельные стейтмашины.
Аноним 11/09/20 Птн 10:38:31 69817314
1599809565.png 22Кб, 510x435
510x435
1599809588.png 5Кб, 504x285
504x285
>>698164
О, спасибо, а я вчера мучительно подбирал русскоязычный термин, так и не подобрал. Код универсален, можно и гонки на нём сделать.
>>698165
> хреновые идеи
> наебешься
Ну а щито поделать, программирование не лишено некоторой доли мазохизма.

Алсо, всё заработало. Пикрелейтед. Доволен как слон. ЧСВ +10
Аноним 13/09/20 Вск 16:07:16 69851315
Посоветуйте, как закодить контроллер, чтобы он катился и подскакивал?
Аноним 13/09/20 Вск 18:02:40 69853016
>>698513
2d? 3d? Можно на физике, у rigibody тела можно создать физический материал, там есть bounciness. А само вращение можно задавать какими-то пропертями angular_... Но может быть без импульсов не обойтись будет.
Можно и без физики, просто обычный контроллер, только при движении спрайт/меш выставляешь на угол, пропорциональный пройденному расстоянию (чет там на пи поделить). Подпрыгивать, соответственно, так же как прыгают в обычном контроллере вычитая из .y и потом прибавляя гравитацию.
Аноним 13/09/20 Вск 21:13:59 69859017
Общался с одним из представителей годототреда по поводу игры про иерархию карт. Прикладываю исходники моего говнокода.

https://dropmefiles.com/TWCLL
Аноним 14/09/20 Пнд 09:35:51 69868818
1600064850.png 30Кб, 739x483
739x483
>>698173
> всё заработало
Чтобы эта машина не казалась абстрактным экспериментом, приведу пример использования, пиклелейтед класс-состояние, который при его достижении, управляет персонажем с клавиатуры. Можно активировать другие состояния, в которых персонаж управляется компом, в катсценках например, или использовать несколько типов управления (на земле, под водой, в полёте, и т.п.), или реализовать геймплей майнд-контроля, когда вашего персонажа контроллит лич, а вы судорожно стучите по клавише хила, чтобы управление вернулось.
Аноним 14/09/20 Пнд 11:49:41 69869319
>>698590
У тебя уже много сделано, молодец
Аноним 15/09/20 Втр 00:27:01 69883120
>>698693
Да, я же говорю, тупо забомбил от того, что не могу карточки нормально по столу на рандоме расположить так, чтобы они не пересекались и перегорел, лол.
+ без понятия как сделать нормально кастомные вызовы функций с передачей туда параметров.
Аноним 15/09/20 Втр 12:27:04 69886321
>>698831
> как сделать нормально кастомные вызовы функций с передачей туда параметров
Эмм, поподробнее здесь. Я вызывал кастомные параметрические методы несколькими способами. Чаще всего через встроенный механизм .call(), .callv()
Аноним 15/09/20 Втр 14:00:53 69887822
>>698831
Я на твг делал карты на сигналах. Правда, толком не доделал. Идея простая - кому надо, тот на те сигналы и подписан. Например, карта может получить сигнал пора лететь в такую-то точку. Начинается анимация, когда анимация закончится, карта получит сигнал об окончании анимации и разошлет сигнал о том, что она на месте. В простых случаях вызывающий код просто ждал по yield(...). В сигнале можно передавать данные. Это может быть массив, или к примеру, словарь. [location:"лес", action:"мамку твою любил"]
Аноним 15/09/20 Втр 18:24:42 69890023
>>698863
Все верно. А теперь представим, что для части действий, которые должен сделать пользователь, ты должен передать урон этой же карте, другой, герою, печенью на столе. Меняется только объект. И вот это разделение говнокодом на matchс каким-нибудь текстом из жсона меня выбесило чето.

>>698878
Сигналы это круто,но я о другом.
Аноним 15/09/20 Втр 23:54:33 69894724
>>698900
> для части действий, которые должен сделать пользователь, ты должен передать урон этой же карте, другой, герою, печенью на столе
Анон выше верно заметил, это делается через сигналы.
> это разделение говнокодом на match с каким-нибудь текстом из жсона
Возможно, твоя задача более удобно решится через глобальные сигналы. Объясню: делаешь синглтон, в нём объявляешь сигналы. Излучает сигналы только этот синглтон. Объекты, когда им нужно, подписываются на глобальные сигналы своим коллбэком. После чего ты единожды излучив нужный сигнал (signal_hub.emit_signal make_damage(10), будешь уверен, что эта же карта, другая, герой, печенье на столе, обработают глобальный сигнал и нанесут себе урон.
Аноним 16/09/20 Срд 00:04:21 69895025
1600203860868.png 32Кб, 494x400
494x400
>>698947
Вот например, у меня в одном из проектов было:
Аноним 16/09/20 Срд 12:59:51 69899726
>>698947
Не нужны сигналы. У моего персонажа есть ссылка и на первую карту и на выбранную и на себя. Он вполне может агрегировать внутри себя эту логику. Да и сигналы много кушают, как бы они не были удобны. Нотификациями быстрее.
Аноним 16/09/20 Срд 13:53:13 69900627
>>698997
А ты куда то торопишься в карточной игре?
Аноним 16/09/20 Срд 20:38:38 69917728
>>698997
> Да и сигналы много кушают, как бы они не были удобны. Нотификациями быстрее.
Ничоси, какой внезапный хинт. Изучил вопрос и нашёл вот эту писечку:
https://github.com/didier-v/GodotNotificationCenter
Пойду щупать.
Аноним 16/09/20 Срд 20:41:08 69917929
>>699177
Зачем это? Это то же самое, что делают сигналы.
Аноним 16/09/20 Срд 20:42:38 69918030
>>699179
Я уже сам разглядел. Да ещё и хуже, надо вручную дисконнектить. Я думал, этот код юзает встроенный механизм нотификаций, а это просто название в коде.
Аноним 16/09/20 Срд 20:45:34 69918131
Аноним 16/09/20 Срд 21:23:52 69919832
>>699181
На моём примере. У чувака есть 3 спелла. Первый юзается на себя, второй на героя, третий на комбо карту. Все что они делают - передают дамаг. Причем тут сигналы? Мне надо прокинуть верный референс без заеба, считав из жсона ноду.
Аноним 16/09/20 Срд 21:40:03 69920833
Аноним 16/09/20 Срд 21:41:56 69921034
>>699198
У тебя в проекте, который ты скидывал, это реализовано? Назови точное место. Я несколько раз туда заглядывал, но ничо нипонил.
Аноним 16/09/20 Срд 22:08:58 69921535
>>699198
> считав из жсона ноду
Нирикаминдую такой подход, несмотря на то, что он показан в официальной документации (навскидку, в статье по сохранениям игор).
Моё мнение - игровые данные (которые считываются из текстовых жсон-файлов) должны быть отделены от внутренней логики движка. Это значит, что никаких нод и путей к нодам в жсон быть не должно. В терминологии жсон объект - это ассоциативный массив, который в терминологии годота - словарь. Вот единственное, что я сериализую и всем рекомендую. Приложения перекидываются между собой словарями. Этого необходимо и достаточно для подавляющего большинства задач.

Если же тебе для поднятия карты, нужно десериализовать ноду, сохранённую в жсон - это, по моему глубокому убеждению, ошибка архитектуры твоего проекта.
Аноним 18/09/20 Птн 21:15:14 69953736
>>699210
Есть синглтон-персонаж. У него есть методы взаимодействия с миром. И вот каждая карточка спела несет в себе action_id, который является ссылкой в жссон на такой экшон. В будущем этот жсон сменится на бд. И он такой считывает жсон и вызывает то, что надо.

>>699215
Я знаю. И я по этому сгорел. Как указать одностроково в коде таргет который описан в скролле жсона, чтобы это могли быть разные таргеты. Не ясно.
Настройки X
Ответить в тред X
15000
Макс объем: 40Mб, макс кол-во файлов: 4
Кликни/брось файл/ctrl-v
Стикеры X
Избранное / Топ тредов