Area2D
Inherits: CollisionObject2D < Node2D < CanvasItem < Node < Object
用于检测、物理和音频影响的 2D 区域。
描述
检测CollisionObject2D节点重叠、进入或退出的2D区域。还可以改变或覆盖局部物理参数(重力、阻尼),并将音频路由到一个自定义的音频总线。
教程
属性
| ||
| ||
| ||
| ||
| ||
| ||
| ||
| ||
| ||
| ||
| ||
|
方法
get_overlapping_areas ( ) const | |
get_overlapping_bodies ( ) const | |
overlaps_area ( Node area ) const | |
overlaps_body ( Node body ) const |
信号
- area_entered ( Area2D area )
当另一个Area2D进入这个Area2D时发出的。需要将监控monitoring设置为true
。
area
参数是其他Area2D。
- area_exited ( Area2D area )
当另一个Area2D离开这个Area2D时发出的。要求监控monitoring被设置为true
。
area
参数是其他Area2D。
当另一个Area2D的Shape2D进入此Area2D的Shape2D时触发。需要将 monitoring 设置为true
。
area_rid
由Physics2DServer使用的其他Area2D的CollisionObject2D的RID。
area
其他Area2D。
area_shape_index
Physics2DServer使用的其他Area2D的Shape2D的索引。用area.shape_owner_get_owner(area_shape_index)
获得CollisionShape2D节点。
local_shape_index
此Area2D的Shape2D的索引,由Physics2DServer使用。用self.shape_owner_get_owner(local_shape_index)
获取CollisionShape2D节点。
当另一个Area2D的Shape2D退出这个Area2D的Shape2D之一时触发。要求monitoring 被设置为true
。
area_rid
由Physics2DServer使用的其他Area2D的CollisionObject2D的RID。
area
其他Area2D。
area_shape_index
Physics2DServer使用的其他Area2D的Shape2D的索引。用area.shape_owner_get_owner(area_shape_index)
获取CollisionShape2D节点。
local_shape_index
这个Area2D的Shape2D的索引,由Physics2DServer使用。用self.shape_owner_get_owner(local_shape_index)
获得CollisionShape2D节点。
- body_entered ( Node body )
当一个PhysicsBody2D或TileMap进入这个Area2D时发出的。需要将监控monitoring设置为true
。如果TileSet有碰撞形状Shape2D,则检测到TileMap。
body
参数是其他PhysicsBody2D或TileMap的Node,如果它存在于树中。
- body_exited ( Node body )
当 PhysicsBody2D 或 TileMap 离开此 Area2D 时发出。需要将监控monitoring设置为true
。如果 TileSet 具有碰撞形状 Shape2D,则会检测到 TileMap。
body
参数是其他 PhysicsBody2D 或 TileMap 的 Node,如果它存在于树中。
当PhysicsBody2D或TileMap的Shape2D之一进入此Area2D的Shape2D之一时触发。需要将monitoring设置为true
。如果TileSet有CollisionShape2D,就会检测到TileMap。
body_rid
Physics2DServer使用的PhysicsBody2D或TileSet的CollisionObject2D的RID。
body
PhysicsBody2D或TileMap的Node,如果它在树上存在的话。
body_shape_index
Physics2DServer使用的PhysicsBody2D或TileMap的Shape2D的索引。用body.shape_owner_get_owner(body_shape_index)
获得CollisionShape2D节点。
local_shape_index
此Area2D的Shape2D的索引,由Physics2DServer使用。用self.shape_owner_get_owner(local_shape_index)
获得CollisionShape2D节点。
当PhysicsBody2D或TileMap的一个Shape2D退出这个Area2D的一个Shape2D时发出的。需要将monitoring设置为true
。如果TileSet有碰撞Shape2D,就会检测到TileMap。
body_rid
是Physics2DServer使用的PhysicsBody2D或TileSet的CollisionObject2D的RID。
body
PhysicsBody2D或TileMap的Node,如果它在树上存在的话。
body_shape_index
Physics2DServer使用的PhysicsBody2D或TileMap的Shape2D的索引。用body.shape_owner_get_owner(body_shape_index)
获取CollisionShape2D节点。
local_shape_index
此Area2D的Shape2D的索引,由Physics2DServer使用。用self.shape_owner_get_owner(local_shape_index)
获取CollisionShape2D节点。
枚举
enum SpaceOverride:
SPACE_OVERRIDE_DISABLED = 0 —- 这个区域不影响重力/阻尼。
SPACE_OVERRIDE_COMBINE = 1 —- 该区域将其重力/阻尼值加到迄今为止计算出的任何值上(按 priority 排序)。
SPACE_OVERRIDE_COMBINE_REPLACE = 2 —- 该区域将其重力/阻尼值添加到到目前为止已计算的任何内容(按 priority 顺序),而忽略任何较低优先级的区域。
SPACE_OVERRIDE_REPLACE = 3 —- 该区域将替换所有重力/阻尼,甚至是默认值,而忽略任何较低优先级的区域。
SPACE_OVERRIDE_REPLACE_COMBINE = 4 —- 这个区域取代了到目前为止计算出的任何重力/阻尼(按 priority 顺序),但继续计算其余的区域。
属性说明
- float angular_damp
Default |
|
Setter | set_angular_damp(value) |
Getter | get_angular_damp() |
物体在此区域停止旋转的速度。代表每秒损失的角速度。
关于阻尼的更多细节见 ProjectSettings.physics/2d/default_angular_damp。
- String audio_bus_name
Default |
|
Setter | set_audio_bus_name(value) |
Getter | get_audio_bus_name() |
该区域音频总线的名称。
- bool audio_bus_override
Default |
|
Setter | set_audio_bus_override(value) |
Getter | is_overriding_audio_bus() |
为 true
时该区域的音频总线将覆盖默认的音频总线。
- float gravity
Default |
|
Setter | set_gravity(value) |
Getter | get_gravity() |
该区域的重力强度(以像素/秒的平方为单位)。这个值是重力向量的倍数。这对改变引力大小而不改变其方向很有用。
- float gravity_distance_scale
Default |
|
Setter | set_gravity_distance_scale(value) |
Getter | get_gravity_distance_scale() |
点重力的衰减系数。该值越大,重力值随距离下降的速度就越快。
- bool gravity_point
Default |
|
Setter | set_gravity_is_point(value) |
Getter | is_gravity_a_point() |
如果 true
,则从一个点计算重力(通过 gravity_vec 设置)。参阅 space_override。
- Vector2 gravity_vec
Default |
|
Setter | set_gravity_vector(value) |
Getter | get_gravity_vector() |
区域的未归一化的重力向量。如果重力作用在一个点上,则它将是引力点。请参阅 gravity_point。
- float linear_damp
Default |
|
Setter | set_linear_damp(value) |
Getter | get_linear_damp() |
物体在此区域停止运动的速度。代表每秒损失的线速度。
关于阻尼的更多细节见 ProjectSettings.physics/2d/default_linear_damp。
- bool monitorable
Default |
|
Setter | set_monitorable(value) |
Getter | is_monitorable() |
为 true
时其他监测区域可以检测到这个区域。
- bool monitoring
Default |
|
Setter | set_monitoring(value) |
Getter | is_monitoring() |
为 true
时该区域能够检测到进入和退出该区域的实体或区域。
- float priority
Default |
|
Setter | set_priority(value) |
Getter | get_priority() |
该区域的优先级。将优先处理优先级较高的区域。
- SpaceOverride space_override
Default |
|
Setter | set_space_override_mode(value) |
Getter | get_space_override_mode() |
该区域内重力和阻尼计算的覆盖模式。可能的值见SpaceOverride。
方法说明
- Array get_overlapping_areas ( ) const
返回相交的 Area2D
的列表。重叠区域的 CollisionObject2D.collision_layer 必须是这个区域 CollisionObject2D.collision_mask 的一部分,这样才能被检测到。
出于性能的考虑(所有碰撞都是一起处理的),这个列表会在物理步骤中进行一次修改,而不是在物体被移动后立即修改。请考虑使用信号来代替。
- Array get_overlapping_bodies ( ) const
返回相交的 PhysicsBody2D 的列表。重叠物体的 CollisionObject2D.collision_layer 必须是这个区域 CollisionObject2D.collision_mask 的一部分,这样才能被检测到。
出于性能的考虑(所有碰撞都是一起处理的),这个列表会在物理步骤中进行一次修改,而不是在物体被移动后立即修改。请考虑使用信号来代替。
如果 true
,则给定区域与该区域重叠。
注意:在移动物体后,这个测试的结果不是即时的。为了性能,重叠列表在每一帧和物理步骤之前更新一次。可以考虑用信号代替。
如果true
,给定的物理体就与Area2D发生重叠。
注意:在移动物体后,这个测试的结果不是即时的。为了性能,重叠列表在每一帧和物理步骤之前更新一次。可以考虑使用信号来代替。
body
参数可以是一个PhysicsBody2D或一个TileMap实例(虽然TileMaps本身不是物理体,但它们用碰撞形状注册它们的瓦片作为一个虚拟物理体)。