Area2D

Inherits: CollisionObject2D < Node2D < CanvasItem < Node < Object

用于检测、物理和音频影响的 2D 区域。

描述

检测CollisionObject2D节点重叠、进入或退出的2D区域。还可以改变或覆盖局部物理参数(重力、阻尼),并将音频路由到一个自定义的音频总线。

教程

属性

float

angular_damp

1.0

String

audio_bus_name

“Master”

bool

audio_bus_override

false

float

gravity

98.0

float

gravity_distance_scale

0.0

bool

gravity_point

false

Vector2

gravity_vec

Vector2( 0, 1 )

float

linear_damp

0.1

bool

monitorable

true

bool

monitoring

true

float

priority

0.0

SpaceOverride

space_override

0

方法

Array

get_overlapping_areas ( ) const

Array

get_overlapping_bodies ( ) const

bool

overlaps_area ( Node area ) const

bool

overlaps_body ( Node body ) const

信号

当另一个Area2D进入这个Area2D时发出的。需要将监控monitoring设置为true

area参数是其他Area2D。


当另一个Area2D离开这个Area2D时发出的。要求监控monitoring被设置为true

area参数是其他Area2D。


  • area_shape_entered ( RID area_rid, Area2D area, int area_shape_index, int local_shape_index )

当另一个Area2D的Shape2D进入此Area2D的Shape2D时触发。需要将 monitoring 设置为true

area_ridPhysics2DServer使用的其他Area2D的CollisionObject2DRID

area 其他Area2D。

area_shape_indexPhysics2DServer使用的其他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节点。


  • area_shape_exited ( RID area_rid, Area2D area, int area_shape_index, int local_shape_index )

当另一个Area2D的Shape2D退出这个Area2D的Shape2D之一时触发。要求monitoring 被设置为true

area_ridPhysics2DServer使用的其他Area2D的CollisionObject2DRID

area 其他Area2D。

area_shape_indexPhysics2DServer使用的其他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 )

当一个PhysicsBody2DTileMap进入这个Area2D时发出的。需要将监控monitoring设置为true。如果TileSet有碰撞形状Shape2D,则检测到TileMap

body参数是其他PhysicsBody2DTileMapNode,如果它存在于树中。


  • body_exited ( Node body )

PhysicsBody2DTileMap 离开此 Area2D 时发出。需要将监控monitoring设置为true。如果 TileSet 具有碰撞形状 Shape2D,则会检测到 TileMap

body 参数是其他 PhysicsBody2DTileMapNode,如果它存在于树中。


  • body_shape_entered ( RID body_rid, Node body, int body_shape_index, int local_shape_index )

PhysicsBody2DTileMapShape2D之一进入此Area2D的Shape2D之一时触发。需要将monitoring设置为true。如果TileSet有CollisionShape2D,就会检测到TileMap

body_rid Physics2DServer使用的PhysicsBody2DTileSetCollisionObject2DRID

body PhysicsBody2DTileMapNode,如果它在树上存在的话。

body_shape_index Physics2DServer使用的PhysicsBody2DTileMapShape2D的索引。用body.shape_owner_get_owner(body_shape_index)获得CollisionShape2D节点。

local_shape_index此Area2D的Shape2D的索引,由Physics2DServer使用。用self.shape_owner_get_owner(local_shape_index)获得CollisionShape2D节点。


  • body_shape_exited ( RID body_rid, Node body, int body_shape_index, int local_shape_index )

PhysicsBody2DTileMap的一个Shape2D退出这个Area2D的一个Shape2D时发出的。需要将monitoring设置为true。如果TileSet有碰撞Shape2D,就会检测到TileMap

body_ridPhysics2DServer使用的PhysicsBody2DTileSetCollisionObject2DRID

body PhysicsBody2DTileMapNode,如果它在树上存在的话。

body_shape_index Physics2DServer使用的PhysicsBody2DTileMapShape2D的索引。用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 顺序),但继续计算其余的区域。

属性说明

Default

1.0

Setter

set_angular_damp(value)

Getter

get_angular_damp()

物体在此区域停止旋转的速度。代表每秒损失的角速度。

关于阻尼的更多细节见 ProjectSettings.physics/2d/default_angular_damp


Default

“Master”

Setter

set_audio_bus_name(value)

Getter

get_audio_bus_name()

该区域音频总线的名称。


  • bool audio_bus_override

Default

false

Setter

set_audio_bus_override(value)

Getter

is_overriding_audio_bus()

true 时该区域的音频总线将覆盖默认的音频总线。


Default

98.0

Setter

set_gravity(value)

Getter

get_gravity()

该区域的重力强度(以像素/秒的平方为单位)。这个值是重力向量的倍数。这对改变引力大小而不改变其方向很有用。


  • float gravity_distance_scale

Default

0.0

Setter

set_gravity_distance_scale(value)

Getter

get_gravity_distance_scale()

点重力的衰减系数。该值越大,重力值随距离下降的速度就越快。


Default

false

Setter

set_gravity_is_point(value)

Getter

is_gravity_a_point()

如果 true,则从一个点计算重力(通过 gravity_vec 设置)。参阅 space_override


Default

Vector2( 0, 1 )

Setter

set_gravity_vector(value)

Getter

get_gravity_vector()

区域的未归一化的重力向量。如果重力作用在一个点上,则它将是引力点。请参阅 gravity_point


Default

0.1

Setter

set_linear_damp(value)

Getter

get_linear_damp()

物体在此区域停止运动的速度。代表每秒损失的线速度。

关于阻尼的更多细节见 ProjectSettings.physics/2d/default_linear_damp


Default

true

Setter

set_monitorable(value)

Getter

is_monitorable()

true 时其他监测区域可以检测到这个区域。


Default

true

Setter

set_monitoring(value)

Getter

is_monitoring()

true 时该区域能够检测到进入和退出该区域的实体或区域。


Default

0.0

Setter

set_priority(value)

Getter

get_priority()

该区域的优先级。将优先处理优先级较高的区域。


Default

0

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本身不是物理体,但它们用碰撞形状注册它们的瓦片作为一个虚拟物理体)。