Up to date

This page is up to date for Godot 4.2. If you still find outdated information, please open an issue.

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 ( Rect2 from )

Rect2

Rect2 ( Rect2i from )

Rect2

Rect2 ( Vector2 position, Vector2 size )

Rect2

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

方法

Rect2

abs ( ) const

bool

encloses ( Rect2 b ) const

Rect2

expand ( Vector2 to ) const

float

get_area ( ) const

Vector2

get_center ( ) const

Rect2

grow ( float amount ) const

Rect2

grow_individual ( float left, float top, float right, float bottom ) const

Rect2

grow_side ( int side, float amount ) const

bool

has_area ( ) const

bool

has_point ( Vector2 point ) const

Rect2

intersection ( Rect2 b ) const

bool

intersects ( Rect2 b, bool include_borders=false ) const

bool

is_equal_approx ( Rect2 rect ) const

bool

is_finite ( ) const

Rect2

merge ( Rect2 b ) const

操作符

bool

operator != ( Rect2 right )

Rect2

operator * ( Transform2D right )

bool

operator == ( Rect2 right )


属性说明

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 ( Rect2 from )

构造给定 Rect2 的副本。


Rect2 Rect2 ( Rect2i from )

Rect2i 构造 Rect2


Rect2 Rect2 ( Vector2 position, Vector2 size )

使用指定的 positionsize 构造 Rect2


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

构造 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 ( Rect2 b ) const

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


Rect2 expand ( Vector2 to ) 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, 10, 5)

float get_area ( ) const

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


Vector2 get_center ( ) const

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


Rect2 grow ( float amount ) 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 ( float left, float top, float right, float bottom ) const

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


Rect2 grow_side ( int side, float amount ) const

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


bool has_area ( ) const

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


bool has_point ( Vector2 point ) const

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

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


Rect2 intersection ( Rect2 b ) 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 ( Rect2 b, bool include_borders=false ) const

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


bool is_equal_approx ( Rect2 rect ) const

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


bool is_finite ( ) const

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


Rect2 merge ( Rect2 b ) const

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


操作符说明

bool operator != ( Rect2 right )

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

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


Rect2 operator * ( Transform2D right )

假设该变换的基是正交的(即旋转/反射可以,缩放/倾斜则不然),将 Rect2 逆向变换(乘以)给定的 Transform2D 变换矩阵。

rect * transform 相当于 transform.inverse() * rect。请参阅 Transform2D.inverse

对于通过仿射变换的逆变换(例如,通过缩放)进行变换,可以使用 transform.affine_inverse() * rect 来代替。请参阅 Transform2D.affine_inverse


bool operator == ( Rect2 right )

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

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