Найти в Дзене
Игровой движок Godot engine

№60. Наследование и классы.

Оглавление

Практически каждый класс в годо — это класс который наследует свойства других классов.
И цепочка может быть довольно длинной, например StaticBody2D наследуется от PhysicsBody2D, тот в свою очередь от CollisionObject2D и так далее до класса Object.

У каждого класса есть свои свойства. И на самом деле когда мы создаем скрипт , по сути мы расширяем возможности текущего класса.
Например создадим скрипт на ноде StaticBody2D

-2

Фраза extends StaticBody2D как раз и говорит нам о том, что мы расширяем класс StaticBody2D. Т.е мы можем оперировать всеми теми своиствами которые есть у этого класса + создать какие то свои.

Унаследованная сцена :

Давайте создадим спрайт и леибл. И сделаем унаследованную сцену.

Оригинал
Оригинал

Жмем на New Inherited Scene, и выбираем нашу сцену.

-4

Это создаст новую сцену, в которой будет ровно такая же структура как и у оригинала.

Копия
Копия

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

Свой класс.

Свой класс создается при помощи свойства class_name.
Внутри него можно создавать подклассы при помощи class.

Давайте для примера создадим класс Weapons, внутри которого будут переменные Bullets и Power.

второй аргумент опционально — ссылка на иконку
второй аргумент опционально — ссылка на иконку

Теперь, открыв список нод в годо, мы сможем увидеть наш класс:

-7

Можем использовать этот класс как наследуемый для новых нод.
Создадим Node2D, и подвесим на него новый скрипт.
Но укажем что он будет наследоваться от Weapons

-8

И теперь в скрипте нам будут доступны переменные Bullets и Power из класса Weapons.

-9

По итогу — наследование это один из важных аспектов разработки. Используйте эти возможности в своих проектах. Удачи !