Применение принципов объектно-ориентированного программирования в Godot

Движок предлагает два основных способа создания объектов многократного использования: скрипты и сцены. Ни один из них технически не определяет внутренние классы.

Тем не менее многие передовые практики использования Godot включают применение принципов объектно-ориентированного программирования к скриптам и сценам, из которых состоит ваша игра. Вот почему полезно понять, как мы можем думать о них как о классах.

В этом руководстве кратко объясняется, как скрипты и сцены работают в ядре движка, чтобы помочь вам понять, как они работают изнутри.

Как работают скрипты в движке

Движок предоставляет встроенные классы, такие как Node. Их можно расширить для создания производных типов с помощью скрипта.

Эти скрипты технически не являются классами. Вместо этого они представляют собой ресурсы, которые сообщают движку последовательность инициализаций для выполнения в одном из встроенных классов.

Во внутренних классах Godot есть методы, которые регистрируют данные класса с помощью ClassDB. Эта база данных обеспечивает доступ к информации о классе во время выполнения. ClassDB содержит такую информацию о классах как:

  • Свойства.

  • Методы.

  • Константы.

  • Сигналы.

ClassDB - это то, что объекты проверяют при выполнении такой операции, как доступ к свойству или вызов метода. ClassDB проверяет записи базы данных и записи базовых типов объекта, чтобы узнать, поддерживает ли объект операцию.

Присоединение Script к вашему объекту расширяет методы, свойства и сигналы, доступные из ClassDB.

Примечание

Даже скрипты, которые не использующие ключевого слова extends, неявно наследуются от базового класса движка RefCounted. В результате вы можете писать сценарии без ключевого слова extends. Поскольку они расширяют RefCounted, вы не можете прикрепить их к Node.

Сцены

Поведение сцен во многом похоже на классы, поэтому имеет смысл рассматривать сцену как класс. Сцены - это многократно используемые, инстанцируемые и наследуемые группы узлов. Создание сцены аналогично созданию скрипта, который создает узлы и добавляет их как дочерние элементы с помощью add_child().

Часто мы связываем сцену с корневым узлом, который использует узлы сцены. Таким образом, скрипт расширяет сцену, добавляя поведение с помощью императивного кода.

Содержание сцены позволяет определить:

  • Какие узлы доступны скрипту.

  • Как они организованы.

  • Как они инициализированы.

  • Какие сигналы подключены к кому.

Почему все это важно для организации сцены? Потому что экземпляры сцен являются объектами. В результате, многие объектно-ориентированные принципы, применимые к написанному коду, также применимы и к сценам: принцип единственной ответственности (SRP), инкапсуляция и другие.

Сцена всегда является расширением скрипта, прикрепленного к его корневому узлу, поэтому вы можете представлять ее как часть класса.

Большинство техник, описанных в этой серии лучших практик, основаны на этом.