Классы объединяют в себе данные и функции. В API Godot (Интерфейс программирования приложений) есть много предопределенных классов. Эти классы документированы в разделе API официальной документации.
Когда мы хотим использовать класс, мы обычно создаем новый экземпляр этого класса. Этот новый экземпляр класса является объектом с уникальной ссылкой. Например, узлы сцены в Godot являются экземплярами классов.
Мы создаем новую сцену, расширяя существующий класс, такой как Node2D. Вот почему первая строка кода указывает, какой класс расширяется.
Данные класса хранятся в переменных, которые мы называем свойствами. А функции называются методами. Когда мы расширяем класс, мы получаем доступ к его свойствам и методам. Кроме того, мы можем добавить свои собственные свойства и методы для расширения функционала.
Некоторые методы могут быть заменены наши собственными, такими как функции _ready и _process. Они называются виртуальными методами и имеют имя, начинающееся с подчеркивания. В большинстве примеров до сих пор мы заменили функцию _ready в расширенном классе Node2D.
Как только мы сохранили сцену, мы можем повторно использовать ее в других сценах, создавая новые экземпляры. Фактически, мы создали новый безымянный класс. Чтобы дать нашему классу имя, мы можем использовать ключевое слово ‘class_name’, чтобы зарегистрировать его как новый тип в редакторе Godot.
Пример расширения и именования нового класса:
class_name Motorcycle extends Node2D
# Add properties
export(String) var make = "Kawasaki"
export(int) var cc = 900
export(Color, RGB) var color = ColorN("Ninja Green")
var fuel = 0.0
var speed = 0.0
# Override virtual methods
func _ready():
add_fuel(17.3)
func _process(delta):
if fuel > 0.0:
speed += delta
fuel -= delta
print(speed, "km/h")
# Add a new method
func add_fuel(litres):
fuel += litres
Оглавление
ООП
Написание программ с использованием классов называется объектно-ориентированным программированием или ООП. Это помогает нам организовывать функциональность большого проекта в управляемые блоки связанной функциональности (с использованием инкапсуляции).
Способ организации модулей (архитектуры кода) описывается различными известными шаблонами проектирования. Они используются в Godot, и вот несколько примеров:
- Шаблон синглтона — использование автозагрузочного сценария для хранения глобальных данных и глобально доступных функций.
- Шаблон наблюдателя — использование сигналов для отправки оповещений наблюдателям (подключенные сценарии).
- Шаблон фабрики — использование автозагрузочной сцены для хранения предопределенных узлов и имеющей функцию-генератор для предоставления экземпляра одного из этих узлов.
Наследование
Godot широко использует наследование классов, как это видно во встроенной иерархии узлов. Начиная с самого базового класса, называемого Object. Он расширяется для создания класса Node. Затем Node расширяется для создания классов Node2D, Spatial и Control.
В редакторе мы можем видеть иерархию классов, когда мы добавляем новый узел в нашу сцену. Кроме того, в панели Inspector перечисляется цепочка классов, составляющих любой узел, который мы исследуем.
Композиция
Еще одним концептом ООП является композиция. Это, когда класс состоит из экземпляров других классов. Мы составляем сцену в нашей игре, добавляя экземпляры различных узлов. Затем нашей сцене может быть присвоено значение class_name. Хотя в большинстве случаев нам это не требуется.
Вывод
Ну вот и все основы программирования на GDScript. Используйте эти знания в будущем в качестве справочного материала.