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 передбачають застосування об’єктно-орієнтованих принципів програмування до скриптів та сцен, що складають вашу гру. Ось чому корисно зрозуміти, як ми можемо сприймати їх як класи.

Цей керівництво пояснює, як скрипти та сцени працюють в ядрі движка, щоб допомогти вам зрозуміти, як вони працюють зсередини.

Як скрипти працюють в движку

Двигун забезпечує вбудовані класи, такі як Вузли. Ви можете розширити їх для створення похідних типів за допомогою скрипта.

Ці скрипти технічно не є класами. Натомість вони є ресурсами, які повідомляють движку послідовність ініціалізацій для виконання в одному з вбудованих класів движка.

Внутрішні класи Godot мають методи, які реєструють дані класу в ClassDB. Ця база даних під час виконання забезпечує доступ до інформації класу. ClassDB містить інформацію про такі класи, як:

  • Властивості.

  • Методи.

  • Константи.

  • Сигнали.

ClassDB це те, що об’єкти перевіряють при виконанні такої операції, як доступ до властивості чи виклик методу. Він перевіряє записи бази даних та записи базових типів об'єкта, щоб перевірити, чи підтримує об'єкт операцію.

Приєднання скрипта до вашого об'єкта розширює методи, властивості та сигнали, доступні з ClassDB.

Примітка

Навіть скрипти, які не використовують ключове слово extends, неявно успадковують з бази рушія клас RefCounted. В результаті ви можете викликати з коду скрипти без ключового слова extends. Однак, оскільки вони розширюють RefCounted, ви не можете приєднати їх до Node.

Сцени

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

Ми часто об'єднуємо сцену зі скриптовим кореневим вузлом, який використовує вузли сцени. Таким чином, скрипт розширює сцену, додаючи поведінку за допомогою імперативного коду.

Зміст сцени допомагає визначити:

  • Які вузли доступні скрипту.

  • Як вони організовані.

  • Як вони ініціалізуються.

  • Які сигнальні зв'язки вони мають між собою.

Чому все це важливо для організації сцени? Оскільки екземпляри сцен - це об’єкти. Як результат, багато об’єктно-орієнтованих принципів, що застосовуються до написання коду, стосуються і сцен: одинарної відповідальності, інкапсуляції та інше.

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

Більшість методів, описаних у цій серії найкращих практик, ґрунтуються на цьому.