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

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

描述

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

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

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

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

Note

通过 C# 使用该 API 时会有显著不同,详见 C# API differences to 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,将 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 为矩形的左上角。

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 🔗

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


Rect2 expand(to: Vector2) const 🔗

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

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

rect = rect.expand(Vector2(10, 0)) # rect 为 Rect2(0, 0, 10, 2)
rect = rect.expand(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) 相同。


Vector2 get_support(direction: Vector2) const 🔗

返回给定方向上最远的矩形框的顶点位置。该点在碰撞检测算法中通常被称为支撑点。


Rect2 grow(amount: float) const 🔗

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

var a = Rect2(4, 4, 8, 8).grow(4) # a 为 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 🔗

返回该矩形的副本,其 lefttoprightbottom 边扩展了给定的量。相反,负值会缩小边。另见 grow() and 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 🔗

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

注意:对于大小为负Rect2,该方法并不可靠。请首先使用 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) # 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(),会更可靠。