Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
Применение принципов объектно-ориентированного программирования в Godot
Движок предлагает два основных способа создания объектов многократного использования: скрипты и сцены. Ни один из них технически не определяет внутренние классы.
Тем не менее многие передовые практики использования Godot включают применение принципов объектно-ориентированного программирования к скриптам и сценам, из которых состоит ваша игра. Вот почему полезно понять, как мы можем думать о них как о классах.
В этом руководстве кратко объясняется, как скрипты и сцены работают в ядре движка, чтобы помочь вам понять, как они работают изнутри.
Как работают скрипты в движке
Движок предоставляет встроенные классы, такие как Node. Их можно расширить для создания производных типов с помощью скрипта.
Эти скрипты технически не являются классами. Вместо этого они представляют собой ресурсы, которые сообщают движку последовательность инициализаций для выполнения в одном из встроенных классов.
Во внутренних классах Godot есть методы, которые регистрируют данные класса с помощью ClassDB. Эта база данных обеспечивает доступ к информации о классе во время выполнения. ClassDB содержит такую информацию о классах как:
Свойства.
Методы.
Константы.
Сигналы.
ClassDB - это то, что объекты проверяют при выполнении такой операции, как доступ к свойству или вызов метода. ClassDB проверяет записи базы данных и записи базовых типов объекта, чтобы узнать, поддерживает ли объект операцию.
Присоединение Script к вашему объекту расширяет методы, свойства и сигналы, доступные из ClassDB.
Примечание
Даже скрипты, которые не использующие ключевого слова extends, неявно наследуются от базового класса движка RefCounted. В результате вы можете писать сценарии без ключевого слова extends. Поскольку они расширяют RefCounted, вы не можете прикрепить их к Node.
Сцены
Поведение сцен во многом похоже на классы, поэтому имеет смысл рассматривать сцену как класс. Сцены - это многократно используемые, инстанцируемые и наследуемые группы узлов. Создание сцены аналогично созданию скрипта, который создает узлы и добавляет их как дочерние элементы с помощью add_child().
Часто мы связываем сцену с корневым узлом, который использует узлы сцены. Таким образом, скрипт расширяет сцену, добавляя поведение с помощью императивного кода.
Содержание сцены позволяет определить:
Какие узлы доступны скрипту.
Как они организованы.
Как они инициализированы.
Какие сигналы подключены к кому.
Почему все это важно для организации сцены? Потому что экземпляры сцен являются объектами. В результате, многие объектно-ориентированные принципы, применимые к написанному коду, также применимы и к сценам: принцип единственной ответственности (SRP), инкапсуляция и другие.
Сцена всегда является расширением скрипта, прикрепленного к его корневому узлу, поэтому вы можете представлять ее как часть класса.
Большинство техник, описанных в этой серии лучших практик, основаны на этом.