reckfellENGINE

ConcavePolygonShape2D

Набор отрезков для контурной 2D-коллизии; внутри пусто.

На этой странице
class ConcavePolygonShape2DReckfellSharpНаследует Shape2D

ConcavePolygonShape2D хранит независимые отрезки, а не заполненный многоугольник. Segments=[A,B,C,D] задаёт только A–B и C–D. Связи B–C и D–A автоматически не появляются. Даже если отрезки образуют замкнутый контур, маленькая форма целиком внутри него не пересекает границу и не даёт столкновения в прямом запросе.

Для четырёх углов A,B,C,D замкнутый контур нужно задать как [A,B,B,C,C,D,D,A]. Полный проверенный помощник делает это из списка углов. Передавайте каждый угол один раз, без повторения первого в конце. Вызывающий код владеет полученным ресурсом:

C#
using System;
using Reckfell;

public static class ContourFactory2D
{
    // Boundary only: this does not fill the enclosed area or check self-intersections.
    // Supply each corner once; the last edge is added here. Caller owns the resource.
    public static ConcavePolygonShape2D Closed(ReadOnlySpan<Vector2> corners)
    {
        if (corners.Length < 3)
            throw new ArgumentException("At least three corners are required.", nameof(corners));
        var segments = new Vector2[checked(corners.Length * 2)];
        for (int i = 0; i < corners.Length; i++)
        {
            Vector2 a = corners[i];
            Vector2 b = corners[(i + 1) % corners.Length];
            if (!float.IsFinite(a.X) || !float.IsFinite(a.Y) || a == b)
                throw new ArgumentException("Corners must be finite and adjacent corners distinct.", nameof(corners));
            segments[2 * i] = a;
            segments[2 * i + 1] = b;
        }
        var shape = new ConcavePolygonShape2D();
        shape.SetSegments(segments.AsSpan());
        return shape;
    }
}

Помощник проверяет количество углов, конечность координат и отсутствие рёбер нулевой длины. Он не проверяет самопересечения, площадь или корректность художественного контура и не заполняет его. Для заполненного выпуклого объекта используйте ConvexPolygonShape2D; вогнутую заполненную форму разбивайте на выпуклые части.

Новый ресурс пуст. Количество элементов Segments должно быть чётным; пустой массив очищает форму. Getter возвращает независимый массив, который нужно назначить обратно после редактирования. Обе перегрузки SetSegments копируют вход. Changed испускается и при повторных данных. GetRect() охватывает все концы отрезков в локальных координатах, но наличие точки внутри этих границ не означает столкновение с отрезком.

Для коллайдера назначьте ресурс свойству Shape у CollisionShape2D, который является непосредственным дочерним Entity CollisionObject2D. Ресурс сам по себе не добавляет тело в мир.

Проверены массивы и ReadOnlySpan, независимые копии, очистка, локальные границы, Changed и точный помощник. Прямые запросы подтвердили пустую середину замкнутого квадрата, столкновение у его края и отсутствие столкновения с удалённым кругом. Движение тел, непрерывное обнаружение быстрых столкновений, производительность и отрисовка не проверялись.

Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.

Конструкторы1

ConcavePolygonShape2DКонструктор
# ConcavePolygonShape2D
C#
public ConcavePolygonShape2D();

Создаёт ресурс с пустым массивом отрезков и пустыми локальными границами. Форма описывает только отрезки, без заполненной области.

Свойства1

SegmentsСвойство
# Segments
C#
public Vector2[] Segments { get; set; }

Пары концов независимых отрезков: [A,B,C,D] задаёт A–B и C–D. Это не последовательность углов; B–C и D–A не добавляются. Пустой массив очищает геометрию. Количество элементов должно быть чётным; задавайте конечные координаты и разные концы каждого отрезка. Setter копирует данные и испускает Changed даже при повторе; getter возвращает независимый массив. Замкнутый набор отрезков не заполняет внутреннюю область.

Методы3

GetSegmentsVector2[]
# GetSegments
C#
public Vector2[] GetSegments();

Независимая копия пар концов отрезков, либо пустой массив. Для изменения геометрии назначьте данные обратно через Segments или SetSegments.

Возвращает Vector2[]

Независимая копия пар концов отрезков, либо пустой массив. Для изменения геометрии назначьте данные обратно через Segments или SetSegments.

SetSegments2 перегрузки
# SetSegments · 1/2
C#
public void SetSegments(Vector2[] segments);

Пары концов независимых отрезков: [A,B,C,D] задаёт A–B и C–D. Это не последовательность углов; B–C и D–A не добавляются. Пустой массив очищает геометрию. Количество элементов должно быть чётным; задавайте конечные координаты и разные концы каждого отрезка. Setter копирует данные и испускает Changed даже при повторе; getter возвращает независимый массив. Замкнутый набор отрезков не заполняет внутреннюю область.

Параметры
ИмяТипПо умолчанию
segmentsVector2[]—
segments

Чётное число конечных координат, по два разных конца на отрезок. Пустой набор очищает форму. Соседние пары не соединяются автоматически.

# SetSegments · 2/2
C#
public void SetSegments(ReadOnlySpan<Vector2> segments);

Пары концов независимых отрезков: [A,B,C,D] задаёт A–B и C–D. Это не последовательность углов; B–C и D–A не добавляются. Пустой массив очищает геометрию. Количество элементов должно быть чётным; задавайте конечные координаты и разные концы каждого отрезка. Setter копирует данные и испускает Changed даже при повторе; getter возвращает независимый массив. Замкнутый набор отрезков не заполняет внутреннюю область.

Параметры
ИмяТипПо умолчанию
segmentsReadOnlySpan<Vector2>—
segments

Чётное число конечных координат, по два разных конца на отрезок. Пустой набор очищает форму. Соседние пары не соединяются автоматически.

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

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

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

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