1. Первое свидание с Godot: знакомство с интерфейсом и создание механики базового клика
Первое свидание с Godot: знакомство с интерфейсом и создание механики базового клика
Представьте, что вы решили построить дом, но вместо кирпичей у вас — бесконечное количество коробок, которые могут расширяться до размеров вселенной или сжиматься до атома. В Godot эти коробки называются «Сценами», и именно из них мы соберем наш кликер. Если вы когда-нибудь пытались собрать шкаф из IKEA без инструкции и в итоге получали портал в другое измерение — не переживайте. В Godot всё гораздо логичнее, хотя поначалу интерфейс может напомнить пульт управления космическим кораблем, где половина кнопок отвечает за гравитацию, а вторая — за варку кофе.
Анатомия Godot: где лежат ключи от квартиры
Когда вы впервые открываете Godot (версии 4.x), перед вами предстает пустой проект. Это ваш чистый холст. Но прежде чем рисовать, нужно понять, где лежат кисти, а где — ведро с краской. Интерфейс Godot разделен на четыре основные зоны, которые станут вашим домом на ближайшие недели.
> «Всё в Godot является узлом. Узлы объединяются в сцены. Сцены могут быть вложены в другие сцены. Это матрешка, где каждая кукла умеет стрелять лазерами или считать клики». > > Документация Godot 4.2
Сцена и Узлы: строим фундамент кликера
Давайте создадим нашу первую сцену. В кликере всё крутится вокруг интерфейса, поэтому нам нужна сцена типа «User Interface» (Пользовательский интерфейс). Нажмите на кнопку «+» в панели сцен и выберите Control. Переименуйте его в Main.
Почему Control? В Godot есть три основных типа узлов, которые легко различить по цветам:
* Синие узлы (Control): Всё, что касается интерфейса (кнопки, текст, полоски здоровья). Они умеют автоматически растягиваться под разные экраны.
* Красные узлы (Node3D): Для тех, кто хочет делать новый Skyrim (нам пока не сюда).
* Синие/Зеленые узлы (Node2D): Для игровых объектов в 2D (персонажи, пули, деревья).
Наш кликер — это прежде всего интерфейс. Поэтому Control — наш лучший друг. Теперь добавим в него кнопку. Нажмите правой кнопкой на Main -> Add Child Node (Добавить дочерний узел) и найдите Button. В инспекторе, в поле Text, напишите «КЛИКНИ МЕНЯ!». Поздравляю, у вас есть игра. Ладно, шучу, пока это просто кнопка, которая ничего не делает, но мы это исправим.
GDScript: как не бояться кода
Чтобы кнопка начала считать клики, нам нужно написать скрипт. В Godot используется язык GDScript. Если вы видели Python, вы узнаете GDScript. Если вы не видели ничего, кроме Excel, то представьте, что это просто набор инструкций для очень исполнительного, но туповатого робота.
Нажмите на узел Main и кликните на иконку свитка с плюсиком вверху панели сцен. Создайте новый скрипт main.gd. Вы увидите нечто подобное:
Разберем это заклинание:
* extends Control: Это говорит движку, что наш скрипт — это дополнение к узлу Control. Он наследует все его свойства (позицию, размер, цвет).
* func _ready(): Эта функция выполняется один раз, когда игра запускается. Идеальное место, чтобы настроить начальные значения.
* pass: Это просто заглушка, означающая «тут пока ничего нет, не ругайся, робот».
* func _process(delta): Эта функция выполняется каждый кадр (обычно 60 раз в секунду). Сюда мы пишем то, что должно проверяться постоянно. Для простого кликера она нам пока не нужна, так что её можно смело удалить, чтобы не мозолила глаза.
Переменные: где хранить наши миллионы
Чтобы считать клики, нам нужно место в памяти. Для этого существуют переменные. Объявим переменную для счета в самом верху скрипта, сразу после extends:
Слово var (сокращение от variable) говорит Godot: «Эй, зарезервируй мне коробочку под названием score и положи туда ноль». Теперь нам нужно, чтобы при нажатии на кнопку этот ноль превращался в единицу, двойку и так далее.
Сигналы: нервная система вашей игры
Как скрипт узнает, что вы нажали на кнопку? Через Сигналы. Это одна из самых мощных фишек Godot. Представьте, что кнопка — это колокол. Когда по нему бьют (кликают), он издает звук. Скрипт «слышит» этот звук и выполняет действие.
Button в дереве сцен.pressed().Main. Нажмите «Connect».Godot сам создаст в скрипте функцию _on_button_pressed(). Теперь напишем внутри неё логику:
Теперь нажмите F5 (или кнопку Play вверху справа). Godot попросит выбрать главную сцену — выбирайте main.tscn. Нажимайте на кнопку и смотрите в нижнюю панель «Output» (Вывод). Там будут появляться ваши цифры. Вы официально создали механику клика!
Вывод текста: чтобы игрок видел свои достижения
Печатать цифры в консоль разработчика — это круто, но игрок этого не увидит. Нам нужно вывести счет на экран. Для этого добавим еще один узел в Main — Label (Текст). Переименуйте его в ScoreLabel.
В инспекторе в поле Text напишите «Счет: 0». Чтобы текст выглядел солидно, в разделе Label Settings можно создать новый ресурс настроек и изменить размер шрифта. Но как передать значение score из кода в этот текст?
Вернемся в скрипт. Нам нужно как-то обратиться к узлу ScoreLabel. В Godot 4 это делается очень просто через символ ScoreLabel.text = "Счет: " + str(score)
gdscript
var click_power = 1
func _on_button_pressed(): score += click_power update_ui()
func update_ui(): Button/ScoreLabel. Следите за иерархией!
_on_button_pressed, но не «приконнектили» сигнал в панели Node, ничего не произойдет. Кнопка будет нажиматься, но скрипт останется глухим к её мольбам.Мы заложили фундамент. У нас есть сцена, узел управления, переменные и связь между действием игрока (клик) и реакцией системы (изменение счета). На следующем этапе мы превратим это в настоящую магию, добавив визуальные эффекты и заставив интерфейс «дышать» при каждом нажатии. Но пока — похвалите себя. Вы только что создали ядро игровой механики.