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.
Checking the stable version of the documentation...
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 |
|
get_support(direction: Vector2) 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 为矩形的左上角。
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
点对齐。
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)
相同。
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)
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。
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(),会更可靠。