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, основаны на этом.