Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

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(), который более надежен.