reckfellENGINE

Движение в 2D

CharacterBody2D: ввод и столкновения с препятствиями.

На этой странице

Движение вида сверху, без гравитации. Нужен C#-проект: настройка.

1. Создайте документ 2D

Создайте новый документ, выберите корень Entity2D, назовите его World2D и сохраните как World2D.rscene. Если редактор создал корень 3D, начните пустой документ и выберите тип корня вручную.

Текст
World2D (Entity2D)
├── Player (CharacterBody2D)
│   ├── Visual (Polygon2D)
│   └── CollisionShape2D
└── Wall (StaticBody2D)
    ├── Visual (Polygon2D)
    └── CollisionShape2D

В 2D X увеличивается вправо, Y — вниз. Положение задаётся в пикселях координат игрового окна до масштабирования. Для этого урока камера не нужна: объекты размещены около начала координат в видимой области окна. Для проверки можно задать размер области просмотра 640 × 360 в Project Settings → Display → Window.

2. Задайте формы

У Player поставьте Position в (160, 160). У его Visual задайте в свойстве Polygon четыре точки: (-16, -16), (16, -16), (16, 16), (-16, 16). Получится квадрат 32 × 32. Выберите светлый цвет Color.

У Player/CollisionShape2D создайте RectangleShape2D и задайте его Size равным (32, 32). Локальные позиции обоих детей оставьте (0, 0).

У Wall задайте Position: (320, 160). Его Visual получает точки (-16, -80), (16, -80), (16, 80), (-16, 80) и другой цвет. В CollisionShape2D создайте RectangleShape2D с Size: (32, 160).

Слои и маски столкновений оставьте по умолчанию. Polygon2D виден в игре, но сам по себе не останавливает персонажа: для этого нужна Shape внутри физического тела.

3. Настройте ввод

В Project → Project Settings → Input Map добавьте move_left, move_right, move_up, move_down и привяжите A/D/W/S или соответствующие стрелки. Если действия влево и вправо уже созданы в 3D-уроке, используйте существующие. Здесь вертикальные действия называются move_up и move_down.

4. Добавьте Player2D.cs

Прикрепите к Player скрипт Scripts/Player2D.cs на основе CharacterBody2D:

C#
using Reckfell;

public partial class Player2D : CharacterBody2D
{
    [Export] public float Speed { get; set; } = 220.0f;

    public override void _PhysicsProcess(double delta)
    {
        Vector2 direction = Input.GetVector("move_left", "move_right", "move_up", "move_down");
        Velocity = direction * Speed;
        MoveAndSlide();
    }
}

Сохраните, соберите C# и нажмите F6. Щёлкните по игровому окну. Квадрат должен двигаться и упираться в стену.

Скорость и столкновения

Speed здесь измеряется в пикселях за секунду в координатах мира 2D. Это не то же значение масштаба, что 4 единицы в секунду из 3D-урока. MoveAndSlide() уже учитывает физический шаг, поэтому скорость не умножается на delta.

В этом примере нет гравитации: движение одинаково во всех направлениях. Для платформера понадобятся отдельная вертикальная скорость, гравитация и проверка пола, как в 3D-контроллере, но с API 2D.

Если объект не виден, проверьте Polygon, непрозрачность и позицию. Если нет столкновений — Shape у обоих тел. Решение проблем.

Законченная 2D-игра с противниками, счётом и перезапуском.

Документация Reckfell EngineНаверх ↑
БЫСТРЫЙ ПЕРЕХОДНачало работыEntity и иерархияC# & .NET 10Сцены и префабы
Руководства и полный API Reckfell K
reckfellENGINE
RECKFELL ACCOUNT

Вход в аккаунт

Войдите в аккаунт Reckfell.

Один аккаунт для всей платформы Reckfell.