Up to date

This page is up to date for Godot 4.2. If you still find outdated information, please open an issue.

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

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

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

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

Работа скриптов в движке

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

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

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

  • Свойства.

  • Методы.

  • Константы.

  • Сигналы.

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

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

Примечание

Even scripts that don't use the extends keyword implicitly inherit from the engine's base RefCounted class. As a result, you can instantiate scripts without the extends keyword from code. Since they extend RefCounted though, you cannot attach them to a Node.

Сцены

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

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

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

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

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

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

  • Какие сигнальные связи они имеют друг с другом.

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

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

Большинство методов, описанных в этой серии best practices, основаны на этом.