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