Rect2

Двумерная ограничивающая рамка, выровненная по осям, с использованием координат с плавающей точкой.

Описание

Встроенный тип Variant Rect2 представляет собой выровненный по осям прямоугольник в 2D-пространстве. Он определяется его position и size, которые являются Vector2. Он часто используется для быстрых тестов на перекрытие (см. intersects()). Хотя сам Rect2 выровнен по осям, его можно объединить с Transform2D для представления повернутого или наклоненного прямоугольника.

Для целочисленных координат используйте Rect2i. 3D-эквивалент Rect2AABB.

Примечание: Отрицательные значения для size не поддерживаются. При отрицательном размере большинство методов Rect2 работают неправильно. Используйте abs(), чтобы получить эквивалентный Rect2 с неотрицательным размером.

Примечание: В булевом контексте Rect2 оценивается как false, если и position, и size равны нулю (равны Vector2.ZERO). В противном случае он всегда оценивается как true.

Примечание

Существуют заметные различия при использовании данного API с C#. Подробнее см. API различия C# и GDScript.

Обучающие материалы

Свойства

Vector2

end

Vector2(0, 0)

Vector2

position

Vector2(0, 0)

Vector2

size

Vector2(0, 0)

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

Rect2

Rect2()

Rect2

Rect2(from: Rect2)

Rect2

Rect2(from: Rect2i)

Rect2

Rect2(position: Vector2, size: Vector2)

Rect2

Rect2(x: float, y: float, width: float, height: float)

Методы

Rect2

abs() const

bool

encloses(b: Rect2) const

Rect2

expand(to: Vector2) const

float

get_area() const

Vector2

get_center() const

Vector2

get_support(direction: Vector2) const

Rect2

grow(amount: float) const

Rect2

grow_individual(left: float, top: float, right: float, bottom: float) const

Rect2

grow_side(side: int, amount: float) const

bool

has_area() const

bool

has_point(point: Vector2) const

Rect2

intersection(b: Rect2) const

bool

intersects(b: Rect2, include_borders: bool = false) const

bool

is_equal_approx(rect: Rect2) const

bool

is_finite() const

Rect2

merge(b: Rect2) const

Операторы

bool

operator !=(right: Rect2)

Rect2

operator *(right: Transform2D)

bool

operator ==(right: Rect2)


Описания свойств

Vector2 end = Vector2(0, 0) 🔗

Конечная точка. Обычно это нижний правый угол прямоугольника, и эквивалентно position + size. Установка этой точки влияет на size.


Vector2 position = Vector2(0, 0) 🔗

Начальная точка. Обычно это верхний левый угол прямоугольника.


Vector2 size = Vector2(0, 0) 🔗

Ширина и высота прямоугольника, начиная с position. Установка этого значения также влияет на точку end.

Примечание: Рекомендуется устанавливать ширину и высоту на неотрицательные значения, так как большинство методов в Godot предполагают, что position — это верхний левый угол, а end — это нижний правый угол. Чтобы получить эквивалентный прямоугольник с неотрицательным размером, используйте abs().


Описания конструктора

Rect2 Rect2() 🔗

Создает Rect2 с его position и size, установленными на Vector2.ZERO.


Rect2 Rect2(from: Rect2)

Создает Rect2 как копию заданного Rect2.


Rect2 Rect2(from: Rect2i)

Создает Rect2 из Rect2i.


Rect2 Rect2(position: Vector2, size: Vector2)

Создает Rect2 по position и size.


Rect2 Rect2(x: float, y: float, width: float, height: float)

Создает Rect2, устанавливая его position на (x, y), а его size на (width, height).


Описания метода

Rect2 abs() const 🔗

Возвращает Rect2, эквивалентный данному прямоугольнику, с измененной шириной и высотой, которые стали неотрицательными значениями, и с position, являющейся верхним левым углом прямоугольника.

var rect = Rect2(25, 25, -100, -50)
var absolute = rect.abs() # абсолютный — Rect2(-75, -25, 100, 50)

Примечание: Рекомендуется использовать этот метод, когда size отрицательный, так как большинство других методов в Godot предполагают, что position — это верхний левый угол, а end — нижний правый угол.


bool encloses(b: Rect2) const 🔗

Возвращает true, если этот прямоугольник полностью охватывает прямоугольник b.


Rect2 expand(to: Vector2) const 🔗

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

var rect = Rect2(0, 0, 5, 2)

rect = rect.expand(Vector2(10, 0)) # прямоугольник равен Rect2(0, 0, 10, 2)
rect = rect.expand(Vector2(-5, 5)) # прямоугольник равен Rect2(-5, 0, 15, 5)

float get_area() const 🔗

Возвращает площадь прямоугольника. Это эквивалентно size.x * size.y. См. также has_area().


Vector2 get_center() const 🔗

Возвращает центральную точку прямоугольника. Это то же самое, что position + (size / 2.0).


Vector2 get_support(direction: Vector2) const 🔗

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


Rect2 grow(amount: float) const 🔗

Возвращает копию этого прямоугольника, расширенного со всех сторон на заданный amount. Отрицательное amount вместо этого сжимает прямоугольник. См. также grow_individual() и grow_side().

var a = Rect2(4, 4, 8, 8).grow(4) # а — это Rect2(0, 0, 16, 16)
var b = Rect2(0, 0, 8, 4).grow(2) # b — это Rect2(-2, -2, 12, 8)

Rect2 grow_individual(left: float, top: float, right: float, bottom: float) const 🔗

Возвращает копию этого прямоугольника со сторонами left, top, right и bottom, расширенными на заданные значения. Отрицательные значения вместо этого сжимают стороны. См. также grow() и grow_side().


Rect2 grow_side(side: int, amount: float) const 🔗

Возвращает копию этого прямоугольника с его side, расширенным на заданное amount (см. константы Side). Отрицательное amount вместо этого сжимает прямоугольник. См. также grow() и grow_individual().


bool has_area() const 🔗

Возвращает true, если этот прямоугольник имеет положительную ширину и высоту. См. также get_area().


bool has_point(point: Vector2) const 🔗

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

Примечание: Этот метод ненадежен для Rect2 с отрицательным size. Сначала используйте abs(), чтобы получить допустимый прямоугольник.


Rect2 intersection(b: Rect2) const 🔗

Возвращает пересечение между этим прямоугольником и b. Если прямоугольники не пересекаются, возвращает пустой Rect2.

var rect1 = Rect2(0, 0, 5, 10)
var rect2 = Rect2(2, 0, 8, 4)

var a = rect1.intersection(rect2) #а — это Rect2(2, 0, 3, 4)

Примечание: Если вам нужно только узнать, перекрываются ли два прямоугольника, используйте вместо этого intersects().


bool intersects(b: Rect2, include_borders: bool = false) const 🔗

Возвращает true, если этот прямоугольник перекрывается с прямоугольником b. Края обоих прямоугольников исключаются, если только include_borders не равен true.


bool is_equal_approx(rect: Rect2) const 🔗

Возвращает true, если этот прямоугольник и rect приблизительно равны, вызывая Vector2.is_equal_approx() для position и size.


bool is_finite() const 🔗

Возвращает true, если значения этого прямоугольника конечны, вызывая Vector2.is_finite() для position и size.


Rect2 merge(b: Rect2) const 🔗

Возвращает Rect2, который охватывает этот прямоугольник и b по краям. См. также encludes().


Описания оператора

bool operator !=(right: Rect2) 🔗

Возвращает true, если position или size обоих прямоугольников не равны.

Примечание: Из-за ошибок точности с плавающей точкой рассмотрите возможность использования is_equal_approx(), который более надежен.


Rect2 operator *(right: Transform2D) 🔗

Обратно преобразует (умножает) Rect2 на заданную матрицу преобразования Transform2D, при условии, что базис преобразования ортонормален (т. е. поворот/отражение хороши, масштабирование/перекос — нет).

rect * transform эквивалентно transform.inverse() * rect. См. Transform2D.inverse().

Для преобразования с помощью обратного аффинного преобразования (например, с масштабированием) вместо этого можно использовать transform.affine_inverse() * rect. См. Transform2D.affine_inverse().


bool operator ==(right: Rect2) 🔗

Возвращает true, если position и size прямоугольников в точности равны соответственно.

Примечание: Из-за ошибок точности с плавающей точкой рассмотрите возможность использования is_equal_approx(), который более надежен.