Gogot путь новичка. Main menu ч2. События кнопки

Всем привет, это продолжение серии. Предыдущий пост Godot путь новичка. MainMenu

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

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



Изначальное ТЗ.

Надо сделать экран главного меню с двумя кнопками

1. Кнопка - начать игру, закрывает главное меню, открывает экран с игрой.

2. Кнопка - выход, Закрывает всю игру.

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

1. Кнопка - назад в меню, закрывает экран игры, открывает экран главное меню.


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

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

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

Gogot путь новичка. Main menu ч2. События кнопки Godot Engine, Godot, Gamedev, Туториал, Видео, Длиннопост

Понятное дело, тут любой с мало-мальским опытом скажет, что это все сделано неправильно, так вообще нельзя. Тут вырисовывается типичный God-Object, надо срочно все декомпозировать, отрефакторить, а лучше выкинуть и сделать все сначала и правильно пока не разрослось и не поработило вселенную.

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

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

Gogot путь новичка. Main menu ч2. События кнопки Godot Engine, Godot, Gamedev, Туториал, Видео, Длиннопост
Gogot путь новичка. Main menu ч2. События кнопки Godot Engine, Godot, Gamedev, Туториал, Видео, Длиннопост
Gogot путь новичка. Main menu ч2. События кнопки Godot Engine, Godot, Gamedev, Туториал, Видео, Длиннопост
Gogot путь новичка. Main menu ч2. События кнопки Godot Engine, Godot, Gamedev, Туториал, Видео, Длиннопост

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

print('Exit Clicked') заменяем на следующее
get_tree().quit()

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

Мы можем с помощью него выйти из игры, менять сцены(уже в следующем видимо посте), ещё например поставить на паузу  get_tree().paused = true

А о большем и мечтать не приходится, кто хочет глубже копать, вот пожалуйста https://docs.godotengine.org/en/3.3/getting_started/step_by_...



А сейчас рассмотрим ещё один вариант, как можно подписаться на события кнопки, не используя интерфейс. Уже можно сказать по классике, добавим кнопочку на сцену Game))

Как бы не хотелось этого избежать, но делать нечего, как ни крути выходит кликер) Ладно это временно, а для наглядности в самый раз. Тем более переменная score уже есть, её и используем.

Gogot путь новичка. Main menu ч2. События кнопки Godot Engine, Godot, Gamedev, Туториал, Видео, Длиннопост
Gogot путь новичка. Main menu ч2. События кнопки Godot Engine, Godot, Gamedev, Туториал, Видео, Длиннопост

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

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

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


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


Т.З. к следующем посту по геймплею. Это для киндера.

Надо сделать врага отдельной сценой Enemy

У врага должно быть свое хп, урон.

По клику на врага хп должно убывать, желательна анимация какая-то.

По окончании хп, враг должен пропадать со сцены. Желательна анимация какая-то.


А следующий пост скорее всего будет по рефакторингу всего вот этого сверху)

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

Правила сообщества

ОБЩИЕ ПРАВИЛА:

- Уважайте чужой труд и используйте конструктивную критику

- Не занимайтесь саморекламой, пишите качественные и интересные посты

- Никакой политики


СТОИТ ПУБЛИКОВАТЬ:

- Посты о Вашей игре с историей её разработки и описанием полученного опыта

- Обучающие материалы, туториалы

- Интервью с опытными разработчиками

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

НЕ СТОИТ ПУБЛИКОВАТЬ:

- Посты, содержащие только вопрос или просьбу помочь
- Посты, содержащие только идею игры

- Посты, единственная цель которых - набор команды для разработки игры

- Посты, не относящиеся к тематике сообщества

Подобные посты по решению администрации могут быть перемещены из сообщества в общую ленту.

ЗАПРЕЩЕНО:

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

- Выдавать чужой труд за свой

Подобные посты будут перемещены из сообщества в общую ленту, а их авторы по решению администрации могут быть внесены в игнор-лист сообщества.


О РАЗМЕЩЕНИИ ССЫЛОК:

Ссылка на сторонний ресурс, связанный с игрой, допускается только при следующих условиях:

- Пост должен быть содержательным и интересным для пользователей, нести пользу для сообщества

- Ссылка должна размещаться непосредственно в начале или конце поста и только один раз

- Cсылка размещается в формате: "Страница игры в Steam: URL"