Rect2

使用浮点数坐标的 2D 轴对齐边界框。

描述

Rect2 内置 Variant 类型表示 2D 空间中的轴对齐矩形。它由其 positionsize 定义,皆为 Vector2 类型。它经常被用于快速重叠测试(参见 intersects)。虽然 Rect2 本身是轴对齐的,但它可以与 Transform2D 组合来表示旋转或倾斜的矩形。

对于整数坐标,请使用 Rect2iRect2 的 3D 等效体是 AABB

注意:不支持负的 size。对于负大小,大多数 Rect2 方法都无法正常工作。使用 abs 获取具有非负大小的等效 Rect2

注意:在布尔上下文中,如果 positionsize 均为零(等于 Vector2.ZERO),则 Rect2 的计算结果为 false。否则,它的计算结果始终为 true

备注

通过 C# 使用该 API 时会有显著不同,详见 C# API 与 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

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,将 positionsize 设置为 Vector2.ZERO


Rect2 Rect2(from: Rect2)

构造给定 Rect2 的副本。


Rect2 Rect2(from: Rect2i)

Rect2i 构造 Rect2


Rect2 Rect2(position: Vector2, size: Vector2)

使用指定的 positionsize 构造 Rect2


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

构造 Rect2,将 position 设置为 (x, y),将 size 设置为 (width, height)。


方法说明

Rect2 abs() const 🔗

返回一个与该矩形等效的 Rect2,其宽度和高度被修改为非负值,其 position 为矩形的左上角。

GDScriptC#

  1. var rect = Rect2(25, 25, -100, -50)
  2. var absolute = rect.abs() # 绝对值为 Rect2(-75, -25, 100, 50)
  1. var rect = new Rect2(25, 25, -100, -50);
  2. var absolute = rect.Abs(); // 绝对值为 Rect2(-75, -25, 100, 50)

注意:size 为负时,建议使用该方法,因为 Godot 中的大多数其他方法都假设 position 是左上角,end 是右下角。


bool encloses(b: Rect2) const 🔗

如果该矩形完全包含 b 矩形,则返回 true


Rect2 expand(to: Vector2) const 🔗

返回该矩形的副本,如有必要,该矩形被扩展为将边缘与给定的 to 点对齐。

GDScriptC#

  1. var rect = Rect2(0, 0, 5, 2)
  2. rect = rect.expand(Vector2(10, 0)) # rect 为 Rect2(0, 0, 10, 2)
  3. rect = rect.expand(Vector2(-5, 5)) # rect 为 Rect2(-5, 0, 15, 5)
  1. var rect = new Rect2(0, 0, 5, 2);
  2. rect = rect.Expand(new Vector2(10, 0)); // rect 为 Rect2(0, 0, 10, 2)
  3. rect = rect.Expand(new Vector2(-5, 5)); // rect 为 Rect2(-5, 0, 15, 5)

float get_area() const 🔗

返回该矩形的面积。这相当于 size.x * size.y。另请参阅 has_area


Vector2 get_center() const 🔗

返回该矩形的中心点。这与 position + (size / 2.0) 相同。


Rect2 grow(amount: float) const 🔗

返回该矩形的副本,该矩形在所有边上扩展给定的 amount。负的 amount 会缩小该矩形。另见 grow_individual and grow_side

GDScriptC#

  1. var a = Rect2(4, 4, 8, 8).grow(4) # a 为 Rect2(0, 0, 16, 16)
  2. var b = Rect2(0, 0, 8, 4).grow(2) # b 为 Rect2(-2, -2, 12, 8)
  1. var a = new Rect2(4, 4, 8, 8).Grow(4); // a 为 Rect2(0, 0, 16, 16)
  2. var b = new 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 🔗

返回该矩形的副本,其 lefttoprightbottom 边扩展了给定的量。相反,负值会缩小边。另见 grow and grow_side


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

返回该矩形的副本,其 side 按给定的 amount 扩展(请参阅 Side 常量)。相反,负的 amount 会缩小该矩形。另见 growgrow_individual


bool has_area() const 🔗

如果该矩形具有正的宽度和高度,则返回 true。另见 get_area


bool has_point(point: Vector2) const 🔗

如果该矩形包含给定的 point,则返回 true。依照惯例,包括右侧和底部边缘上的点。

注意:对于大小为负Rect2,该方法并不可靠。请首先使用 abs 获取一个有效的矩形。


Rect2 intersection(b: Rect2) const 🔗

返回该矩形与 b 之间的交集。如果该矩形不相交,则返回空的 Rect2

GDScriptC#

  1. var rect1 = Rect2(0, 0, 5, 10)
  2. var rect2 = Rect2(2, 0, 8, 4)
  3. var a = rect1.intersection(rect2) # a 为 Rect2(2, 0, 3, 4)
  1. var rect1 = new Rect2(0, 0, 5, 10);
  2. var rect2 = new Rect2(2, 0, 8, 4);
  3. var a = rect1.Intersection(rect2); // a 为 Rect2(2, 0, 3, 4)

注意:如果你只需要知道两个矩形是否重叠,请改用 intersects


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

如果该矩形与 b 矩形重叠,则返回 true。除非 include_borderstrue,否则两个矩形的边缘均被排除。


bool is_equal_approx(rect: Rect2) const 🔗

如果该矩形和 rect 近似相等,判断方法是通过在 positionsize 上调用 Vector2.is_equal_approx,则返回 true


bool is_finite() const 🔗

如果该矩形是有限的,则返回 true,判断方法是对 positionsize 调用 Vector2.is_finite


Rect2 merge(b: Rect2) const 🔗

返回边界包围该矩形和 bRect2。另见 encloses


运算符说明

bool operator !=(right: Rect2) 🔗

如果两个矩形的 position 不相等或 size 不相等,则返回 true

注意:由于浮点数精度误差,请考虑改用 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) 🔗

如果两个矩形的 position 完全相等且 size 完全相等,则返回 true

注意:由于浮点数精度误差,请考虑改用 is_equal_approx,会更可靠。