Rect2
使用浮点数坐标的 2D 轴对齐边界框。
描述
Rect2 内置 Variant 类型表示 2D 空间中的轴对齐矩形。它由其 position 和 size 定义,皆为 Vector2 类型。它经常被用于快速重叠测试(参见 intersects)。虽然 Rect2 本身是轴对齐的,但它可以与 Transform2D 组合来表示旋转或倾斜的矩形。
对于整数坐标,请使用 Rect2i。Rect2 的 3D 等效体是 AABB。
注意:不支持负的 size。对于负大小,大多数 Rect2 方法都无法正常工作。使用 abs 获取具有非负大小的等效 Rect2。
注意:在布尔上下文中,如果 position 和 size 均为零(等于 Vector2.ZERO),则 Rect2 的计算结果为 false
。否则,它的计算结果始终为 true
。
备注
通过 C# 使用该 API 时会有显著不同,详见 C# API 与 GDScript 的差异。
教程
属性
| ||
| ||
|
构造函数
Rect2() | |
方法
abs() const | |
get_area() const | |
get_center() const | |
grow_individual(left: float, top: float, right: float, bottom: float) const | |
has_area() const | |
intersection(b: Rect2) const | |
intersects(b: Rect2, include_borders: bool = false) const | |
is_equal_approx(rect: Rect2) const | |
is_finite() const | |
运算符
operator !=(right: Rect2) | |
operator *(right: Transform2D) | |
operator ==(right: Rect2) |
属性说明
终点。通常为矩形的右下角,等价于 position + size
。设置该点会影响 size。
Vector2 position = Vector2(0, 0)
🔗
原点。通常为矩形的左上角。
Vector2 size = Vector2(0, 0)
🔗
矩形的宽和高,相对于 position。设置该值会影响终点 end。
注意:建议将宽和高设置为非负数,因为 Godot 中的大多数方法假设 position 为左上角、end 为右下角。要获取等价且大小非负的矩形,请使用 abs。
构造函数说明
构造 Rect2,将 position 和 size 设置为 Vector2.ZERO。
构造给定 Rect2 的副本。
从 Rect2i 构造 Rect2。
Rect2 Rect2(position: Vector2, size: Vector2)
使用指定的 position
和 size
构造 Rect2。
Rect2 Rect2(x: float, y: float, width: float, height: float)
构造 Rect2,将 position 设置为 (x
, y
),将 size 设置为 (width
, height
)。
方法说明
返回一个与该矩形等效的 Rect2,其宽度和高度被修改为非负值,其 position 为矩形的左上角。
GDScriptC#
var rect = Rect2(25, 25, -100, -50)
var absolute = rect.abs() # 绝对值为 Rect2(-75, -25, 100, 50)
var rect = new 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
点对齐。
GDScriptC#
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)
var rect = new Rect2(0, 0, 5, 2);
rect = rect.Expand(new Vector2(10, 0)); // rect 为 Rect2(0, 0, 10, 2)
rect = rect.Expand(new Vector2(-5, 5)); // rect 为 Rect2(-5, 0, 15, 5)
返回该矩形的面积。这相当于 size.x * size.y
。另请参阅 has_area。
返回该矩形的中心点。这与 position + (size / 2.0)
相同。
Rect2 grow(amount: float) const 🔗
返回该矩形的副本,该矩形在所有边上扩展给定的 amount
。负的 amount
会缩小该矩形。另见 grow_individual and grow_side。
GDScriptC#
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)
var a = new Rect2(4, 4, 8, 8).Grow(4); // a 为 Rect2(0, 0, 16, 16)
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 🔗
返回该矩形的副本,其 left
、top
、right
和 bottom
边扩展了给定的量。相反,负值会缩小边。另见 grow and grow_side。
Rect2 grow_side(side: int, amount: float) const 🔗
返回该矩形的副本,其 side
按给定的 amount
扩展(请参阅 Side 常量)。相反,负的 amount
会缩小该矩形。另见 grow 和 grow_individual。
如果该矩形具有正的宽度和高度,则返回 true
。另见 get_area。
bool has_point(point: Vector2) const 🔗
如果该矩形包含给定的 point
,则返回 true
。依照惯例,不包括右侧和底部边缘上的点。
注意:对于大小为负的 Rect2,该方法并不可靠。请首先使用 abs 获取一个有效的矩形。
Rect2 intersection(b: Rect2) const 🔗
返回该矩形与 b
之间的交集。如果该矩形不相交,则返回空的 Rect2。
GDScriptC#
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)
var rect1 = new Rect2(0, 0, 5, 10);
var rect2 = new 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_borders
为 true
,否则两个矩形的边缘均被排除。
bool is_equal_approx(rect: Rect2) const 🔗
如果该矩形和 rect
近似相等,判断方法是通过在 position 和 size 上调用 Vector2.is_equal_approx,则返回 true
。
如果该矩形是有限的,则返回 true
,判断方法是对 position 和 size 调用 Vector2.is_finite。
返回边界包围该矩形和 b
的 Rect2。另见 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,会更可靠。