Применение принципов объектно-ориентированного программирования в Godot
Движок предлагает два основных способа создания объектов многократного использования: скрипты и сцены. Ни один из них технически не определяет внутренние классы.
Тем не менее многие передовые практики использования Godot включают применение принципов объектно-ориентированного программирования к скриптам и сценам, из которых состоит ваша игра. Вот почему полезно понять, как мы можем думать о них как о классах.
В этом руководстве кратко объясняется, как скрипты и сцены работают в ядре движка, чтобы помочь вам понять, как они работают изнутри.
Как работают скрипты в движке
Движок предоставляет встроенные классы, такие как Node. Их можно расширить для создания производных типов с помощью скрипта.
Эти скрипты технически не являются классами. Вместо этого они представляют собой ресурсы, которые сообщают движку последовательность инициализаций для выполнения в одном из встроенных классов.
Во внутренних классах Godot есть методы, которые регистрируют данные класса с помощью ClassDB. Эта база данных обеспечивает доступ к информации о классе во время выполнения. ClassDB содержит такую информацию о классах как:
Свойства.
Методы.
Константы.
Сигналы.
ClassDB - это то, что объекты проверяют при выполнении такой операции, как доступ к свойству или вызов метода. ClassDB проверяет записи базы данных и записи базовых типов объекта, чтобы узнать, поддерживает ли объект операцию.
Присоединение Script к вашему объекту расширяет методы, свойства и сигналы, доступные из ClassDB.
Примечание
Даже скрипты, которые не использующие ключевого слова extends, неявно наследуются от базового класса движка RefCounted. В результате вы можете писать сценарии без ключевого слова extends. Поскольку они расширяют RefCounted, вы не можете прикрепить их к Node.
Сцены
Поведение сцен во многом похоже на классы, поэтому имеет смысл рассматривать сцену как класс. Сцены - это многократно используемые, инстанцируемые и наследуемые группы узлов. Создание сцены аналогично созданию скрипта, который создает узлы и добавляет их как дочерние элементы с помощью add_child().
Часто мы связываем сцену с корневым узлом, который использует узлы сцены. Таким образом, скрипт расширяет сцену, добавляя поведение с помощью императивного кода.
Содержание сцены позволяет определить:
Какие узлы доступны скрипту.
Как они организованы.
Как они инициализированы.
Какие сигналы подключены к кому.
Почему все это важно для организации сцены? Потому что экземпляры сцен являются объектами. В результате, многие объектно-ориентированные принципы, применимые к написанному коду, также применимы и к сценам: принцип единственной ответственности (SRP), инкапсуляция и другие.
Сцена всегда является расширением скрипта, прикрепленного к его корневому узлу, поэтому вы можете представлять ее как часть класса.
Большинство техник, описанных в этой серии лучших практик, основаны на этом.