Документация Godot Engine 4.0 - Пошаговое руководство - Создание вашего первого скрипта

Эта статья является результатом английского перевода Google Translate, и DrGraph добавил некоторые исправления на этой основе. Оригинальная страница на английском языке:

Создание вашего первого скрипта — документация Godot Engine (stable) на английском языке

Создайте свой первый скрипт¶

На этом уроке вы напишете свой первый скрипт для вращения значка Godot с помощью GDScript. Как мы упоминали во введении , мы предполагаем, что у вас есть опыт программирования. Для удобства эквивалентный код C# включен в другую вкладку.

Справка: Чтобы узнать больше о GDScript, его ключевых словах и синтаксисе, перейдите к Справочнику по GDScript .

Справка: Чтобы узнать больше о C#, посетите страницу C# Fundamentals .

Настройки проекта¶

Пожалуйста, создайте новый проект , чтобы начать с нуля. Ваш проект должен включать изображение: иконку Godot, которую мы часто используем в сообществе для прототипирования.

Нам нужно создать узел Sprite2D, чтобы отобразить его в игре. В доке сцены нажмите кнопку «Другие узлы».

Введите «Sprite2D» в строке поиска, чтобы отфильтровать узлы, затем дважды щелкните Sprite2D, чтобы создать узел.

Теперь на вкладке вашей сцены должен быть только один узел Sprite2D.

Узел Sprite2D нуждается в текстуре [Texture] для отображения. В Инспекторе справа вы можете видеть, что свойство Текстуры читается как «[пусто]». Чтобы отобразить значок Godot, щелкните и перетащите файл icon.svgиз дока файловой системы в слот текстуры.

Примечание. Вы можете автоматически создавать узлы Sprite2D, перетаскивая изображения в область просмотра.

Затем щелкните и перетащите значок в окне просмотра, чтобы отцентрировать его в игровом представлении.

Создайте новый скрипт¶

Чтобы создать новый сценарий и прикрепить его к нашему узлу, щелкните правой кнопкой мыши Sprite2D в доке сцены и выберите «Прикрепить сценарий».

Появится окно Присоединить сценарий узла. Это позволяет вам выбрать язык сценария и путь к файлу среди других параметров.

Измените поле шаблона с «узел: по умолчанию» на «объект: пустой», чтобы начать с чистого файла. Оставьте остальные параметры по умолчанию и нажмите кнопку «Создать», чтобы создать скрипт.

Рабочая область скрипта должна появиться с sprite_2d.gdновым открытым файлом и следующей строкой кода:

GD-скрипт
расширяет Sprite2D
С#

с помощью Годо;

общедоступный частичный класс MySprite2D: Sprite2D
{ }

Каждый файл GDScript неявно является классом. ключевое слово extendsопределяет классы, от которых этот скрипт наследует или расширяет. В данном случае это Sprite2D, что означает, что наш скрипт будет иметь доступ ко всем свойствам и функциям узла Sprite2D, включая классы, которые он расширяет, такие как Node2D, CanvasItemи  Node.

Примечание. В GDScript, если вы опустите строку с ключевым словом extends, ваш класс будет неявно расширять RefCounted , который Godot использует для управления памятью приложения.

К унаследованным свойствам относятся те, которые вы видите в доке Inspector, например, наш узел texture.

Примечание. По умолчанию Инспектор отображает свойства узла в «Заглавном регистре», где слова в верхнем регистре разделяются пробелами. В коде GDScript эти свойства находятся в «snake_case», то есть строчных буквах с символами подчеркивания, разделяющими слова.

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

Привет, мир!

Наш скрипт в настоящее время ничего не делает. Давайте для начала напечатаем текст «Hello, world!» на нижней панели вывода.

Добавьте следующий код в ваш скрипт:

GD-скрипт

func _init():
    print("Привет, мир!")

С#
публичный MySprite2D()
{
    GD.Print("Привет, мир!");
}

Давайте сломаем это. ключевое слово funcопределяет новую функцию с именем  _init. Это специальное имя для конструктора нашего класса. Если вы определите эту функцию, движок будет  _init()вызывать ее при создании каждого объекта или узла в памяти.

Примечание. GDScript — это язык, основанный на отступах. Табуляция в начале строки указывает на то, что print()она необходима для работы кода. Если вы опустите его или сделаете неправильный отступ строки, редактор выделит ее красным цветом и отобразит следующее сообщение об ошибке: «Ожидается блок с отступом».

如果您还没有保存场景,可以将场景保存为sprite_2d.tscn, затем нажмите F6 (Cmd + R в macOS), чтобы запустить его. Просмотрите расширенную нижнюю панель вывода . Он должен отображать «Привет, мир!».

После удаления _init()функции у вас останется только одна строка кода.extends Sprite2D

Повернуть¶ _

Время перемещать и вращать наши узлы. Для этого мы добавим в скрипт две переменные-члены: скорость движения [speed] в пикселях/секунду и угловую скорость [angular_speed] в радианах/секунду. extends Sprite2DДобавьте следующий контент после [GDScript] .

GDScript
var speed = 400
var angular_speed = PI
С#
частный интервал _speed = 400;
частный поплавок _angularSpeed ​​= Mathf.Pi;

Переменные-члены расположены в верхней части скрипта после любых строк «расширения», но перед функциями. Каждый экземпляр узла с прикрепленным этим сценарием будет иметь собственную копию свойств speed и angular_speed.

Примечание. Углы в Godot по умолчанию измеряются в радианах, но если вы предпочитаете рассчитывать углы в градусах, доступны встроенные функции и свойства.

Чтобы переместить нашу иконку, нам нужно обновлять ее положение и поворот [состояние] каждый кадр в игровом цикле. Мы можем использовать Nodeвиртуальные функции класса _process(). Если вы определите ее в любом классе, производном от Node, таком как Sprite2D, Godot будет вызывать функцию в каждом кадре и передавать ей параметр deltaс именем , который представляет собой время, прошедшее с момента предыдущего кадра.

ПРИМЕЧАНИЕ. Игры работают, отображая множество изображений в секунду, каждое изображение называется кадром, и они делают это в цикле. Мы измеряем скорость, с которой игра генерирует графику, в кадрах в секунду (FPS). Стремитесь к 60 кадрам в секунду для большинства игр, хотя вы можете найти 30 кадров в секунду на более медленных мобильных устройствах или от 90 до 240 кадров в секунду в играх виртуальной реальности.

Разработчики движка и игр делают все возможное, чтобы обновлять игровой мир и отображать графику с постоянными интервалами, но всегда есть небольшие различия во времени рендеринга кадров. Вот почему движок дает нам это значение дельта-времени, чтобы наше движение не зависело от частоты кадров.

В нижней части скрипта определите функцию:

GDScript
func _process (дельта):
    вращение += угловая_скорость * дельта
С#
public override void _Process (двойная дельта)
{     Rotation += _angularSpeed ​​* (float) delta; }

Ключевое слово funcопределяет новую функцию [GDScript]. После него в скобках нужно написать имя и параметры функции. Двоеточие завершает определение, а следующий блок с отступом представляет собой содержимое или инструкции функции.

Примечание. Обратите внимание , что _process()[similar to] _init()начинается с символа подчеркивания. По соглашению виртуальные функции Godot, то есть встроенные функции, которые вы можете переопределить для связи с движком, начинаются с подчеркивания.

Строка кода в rotation += angular_speed * deltarotationNode2DSprite2D,функции должна увеличивать вращение спрайта [Sprite] каждый кадр. Здесь [rotation] является атрибутом, унаследованным от класса [Node2D], а [класс Sprite2D] расширен. Он управляет вращением нашего узла и использует радианы.

Примечание. В редакторе кода можно щелкнуть любое встроенное свойство или функцию, удерживая нажатой клавишу Ctrl, например position, rotation, или _processоткрыть соответствующий документ в новой вкладке.

Запустите сцену, чтобы увидеть, как значок Годо вращается на месте.

Примечание: в C# будьте осторожны с _Process()параметром delta为double类型, поэтому, когда мы применяем его к вращению, нам нужно преобразовать его вfloat。

Переместить¶ _

Теперь позвольте узлам двигаться. Добавьте следующие две строки внутрь функции _process() , убедившись, что новые строки имеют такой же отступ, как и строки перед ними.rotation += angular * delta

GDScript

переменная скорость = Vector2.UP.rotated(вращение) * скорость

положение += скорость * дельта

С#

скорость var = Vector2.Up.Rotated(Rotation) * _speed;

Позиция += скорость * (плавающая) дельта;

Как мы уже видели, varключевое слово определяет новую переменную. Если вы поместите его вверху вашего скрипта, он определяет свойство класса. [Используется здесь] Внутри функции он определяет локальную переменную: она существует только в пределах области действия функции.

Мы определяем velocityлокальную переменную с именем , которая представляет собой двумерный вектор [Vector2], представляющий направление и скорость. Чтобы переместить узел вперед, мы Vector2.UPначинаем с константы класса Vector2, восходящего вектора, и  rotated()вращаем его, вызывая для него метод. Это выражение Vector2.UP.rotated(rotation)【为】представляет собой вектор, указывающий вперед относительно нашего значка. Умноженное на наше speed свойство, оно дает нам скорость, которую мы можем использовать для перемещения узла вперед.

Мы добавляем [ velocity * deltaposition】к свойству позиции узла], чтобы переместить его. Сама позиция [позиция] представляет собой тип Vector2 , встроенный в Godot тип, представляющий двумерный вектор.

Запустите сцену, чтобы увидеть, как Годо ходит по кругу [эффект бега].

ПРИМЕЧАНИЕ. Подобные движущиеся узлы не будут учитывать столкновения со стенами или полами. В своей первой 2D-игре вы узнаете еще один способ перемещения объектов при обнаружении столкновений.

Наши узлы в настоящее время перемещаются самостоятельно. В следующем разделе  «Прослушивание ввода игрока » мы будем использовать ввод игрока для управления им.

Полный скрипт¶

Вот полный sprite_2d.gdфайл для справки.

GDScript

расширяет Sprite2D

var speed = 400
var angular_speed = PI


func _process (дельта):
    вращение += угловая_скорость * дельта

    переменная скорость = Vector2.UP.rotated(вращение) * скорость

    положение += скорость * дельта

С#

с помощью Годо;

открытый частичный класс MySprite2D: Sprite2D
{     private int _speed = 400;     частный поплавок _angularSpeed ​​= Mathf.Pi;

    public override void _Process (двойная дельта)
    {         Rotation += _angularSpeed ​​* (float) delta;         скорость var = Vector2.Up.Rotated(Rotation) * _speed;

        Позиция += скорость * (плавающая) дельта;
    }
}

Supongo que te gusta

Origin blog.csdn.net/drgraph/article/details/130794797
Recomendado
Clasificación