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.

Area2D

Hereda: CollisionObject2D < Node2D < CanvasItem < Node < Object

Una región de espacio 2D que detecta otros CollisionObject2Ds entrando o saliendo de él.

Descripción

Area2D es una región del espacio 2D definida por uno o varios nodos hijo CollisionShape2D o CollisionPolygon2D. Detecta cuándo otros CollisionObject2D entran o salen de ella, y también realiza un seguimiento de qué objetos de colisión aún no han salido (es decir, cuáles la están superponiendo).

Este nodo también puede alterar o sobrescribir parámetros físicos (gravedad, amortiguación) y enrutar el audio a buses de audio personalizados.

Nota: Las áreas y los cuerpos creados con PhysicsServer2D pueden no interactuar como se espera con los Area2D, y podrían fallar al emitir señales o realizar el seguimiento de objetos.

Tutoriales

Propiedades

float

angular_damp

1.0

SpaceOverride

angular_damp_space_override

0

StringName

audio_bus_name

&"Master"

bool

audio_bus_override

false

float

gravity

980.0

Vector2

gravity_direction

Vector2(0, 1)

bool

gravity_point

false

Vector2

gravity_point_center

Vector2(0, 1)

float

gravity_point_unit_distance

0.0

SpaceOverride

gravity_space_override

0

float

linear_damp

0.1

SpaceOverride

linear_damp_space_override

0

bool

monitorable

true

bool

monitoring

true

int

priority

0

Métodos

Array[Area2D]

get_overlapping_areas() const

Array[Node2D]

get_overlapping_bodies() const

bool

has_overlapping_areas() const

bool

has_overlapping_bodies() const

bool

overlaps_area(area: Node) const

bool

overlaps_body(body: Node) const


Señales

area_entered(area: Area2D) 🔗

Emitida cuando el area recibido entra en esta área. Requiere que monitoring se configure como true.


area_exited(area: Area2D) 🔗

Emitida cuando el area recibido sale de esta área. Requiere que monitoring se configure como true.


area_shape_entered(area_rid: RID, area: Area2D, area_shape_index: int, local_shape_index: int) 🔗

Emitida cuando una forma (Shape2D) del área externa (area) entra en una forma de esta área. Requiere que monitoring esté establecido en true.

Los parámetros local_shape_index y area_shape_index contienen los índices de las formas que interactúan de ésta área y del área externa, respectivamente. area_rid contiene el RID del área externa. Estos valores pueden utilizarse con PhysicsServer2D.

Ejemplo: Obtener el nodo CollisionShape2D a partir del índice de la forma:

var other_shape_owner = area.shape_find_owner(area_shape_index)
var other_shape_node = area.shape_owner_get_owner(other_shape_owner)

var local_shape_owner = shape_find_owner(local_shape_index)
var local_shape_node = shape_owner_get_owner(local_shape_owner)

area_shape_exited(area_rid: RID, area: Area2D, area_shape_index: int, local_shape_index: int) 🔗

Se emite cuando una Shape2D de la area recibido sale de una forma de esta área. Requiere que monitoring esté configurado como true.

Véase también area_shape_entered.


body_entered(body: Node2D) 🔗

Emitido cuando el body recibido entra a este área. body puede ser un PhysicsBody2D o un TileMap. Los TileMaps son detectados si su TileSet tiene formas de colisión configuradas. Requiere que monitoring se establezca a true.


body_exited(body: Node2D) 🔗

Emitido cuando el body recibido sale de este área. body puede ser un PhysicsBody2D o un TileMap. Los TileMaps son detectados si su TileSet tiene formas de colisión configuradas. Requiere que monitoring se establezca a true.


body_shape_entered(body_rid: RID, body: Node2D, body_shape_index: int, local_shape_index: int) 🔗

Emitida cuando una forma Shape2D del cuerpo externo body entra en una forma de ésta área. body puede ser un PhysicsBody2D o un TileMap. Los TileMap se detectan si su TileSet tiene formas de colisión configuradas. Requiere que monitoring esté establecido en true.

Los parámetros local_shape_index y body_shape_index contienen los índices de las formas que interactúan de ésta área y del cuerpo externo, respectivamente. body_rid contiene el RID del cuerpo externo. Estos valores pueden utilizarse con PhysicsServer2D.

Ejemplo: Obtener el nodo CollisionShape2D a partir del índice de la forma:

var body_shape_owner = body.shape_find_owner(body_shape_index)
var body_shape_node = body.shape_owner_get_owner(body_shape_owner)

var local_shape_owner = shape_find_owner(local_shape_index)
var local_shape_node = shape_owner_get_owner(local_shape_owner)

body_shape_exited(body_rid: RID, body: Node2D, body_shape_index: int, local_shape_index: int) 🔗

Emitido cuando un Shape2D del body recibido sale de una forma de este área. body puede ser un PhysicsBody2D o un TileMap. Los TileMaps son detectados si su TileSet tiene formas de colisión configuradas. Requiere que monitoring se establezca a true.

Véase también body_shape_entered.


Enumeraciones

enum SpaceOverride: 🔗

SpaceOverride SPACE_OVERRIDE_DISABLED = 0

Esta área no afecta a la gravedad/amortiguación.

SpaceOverride SPACE_OVERRIDE_COMBINE = 1

Esta área añade sus valores de gravedad/amortiguación a lo que se ha calculado hasta ahora (en el orden priority).

SpaceOverride SPACE_OVERRIDE_COMBINE_REPLACE = 2

Esta área añade sus valores de gravedad/amortiguación a lo que se ha calculado hasta ahora (en el orden priority), ignorando cualquier área de menor prioridad.

SpaceOverride SPACE_OVERRIDE_REPLACE = 3

Esta área reemplaza cualquier gravedad/amortiguación, incluso las predeterminadas, ignorando cualquier área de menor prioridad.

SpaceOverride SPACE_OVERRIDE_REPLACE_COMBINE = 4

Esta área reemplaza cualquier gravedad/amortiguación calculada hasta ahora (en orden de priority), pero sigue calculando el resto de las áreas.


Descripciones de Propiedades

float angular_damp = 1.0 🔗

  • void set_angular_damp(value: float)

  • float get_angular_damp()

La velocidad a la que los objetos dejan de girar en esta área. Representa la velocidad angular perdida por segundo.

Véase ProjectSettings.physics/2d/default_angular_damp para obtener más detalles sobre la amortiguación.


SpaceOverride angular_damp_space_override = 0 🔗

Modo de sobre-escritura para los cálculos de amortiguación angular dentro de esta área.


StringName audio_bus_name = &"Master" 🔗

El nombre del bus de audio del área.


bool audio_bus_override = false 🔗

  • void set_audio_bus_override(value: bool)

  • bool is_overriding_audio_bus()

Si es true, el área del bus de audio sobrescribe el bus de audio por defecto.


float gravity = 980.0 🔗

  • void set_gravity(value: float)

  • float get_gravity()

Intensidad gravitatoria del area (en píxeles por segundo al cuadrado). Este valor multiplica la dirección gravitatoria . Esto resulta útil para modificar la fuerza de la gravedad sin alterar su dirección.


Vector2 gravity_direction = Vector2(0, 1) 🔗

  • void set_gravity_direction(value: Vector2)

  • Vector2 get_gravity_direction()

El vector de gravedad del área (no normalizado).


bool gravity_point = false 🔗

  • void set_gravity_is_point(value: bool)

  • bool is_gravity_a_point()

Si es true, la gravedad se calcula a partir de un punto (establecido mediante gravity_point_center). Véase también gravity_space_override.


Vector2 gravity_point_center = Vector2(0, 1) 🔗

  • void set_gravity_point_center(value: Vector2)

  • Vector2 get_gravity_point_center()

Si la gravedad es un punto (ver gravity_point), este será el punto de atracción.


float gravity_point_unit_distance = 0.0 🔗

  • void set_gravity_point_unit_distance(value: float)

  • float get_gravity_point_unit_distance()

La distancia a la que la fuerza de gravedad es igual a gravity. Por ejemplo, en un planeta de 100 píxeles de radio con una gravedad superficial de 4.0 px/s², establezca la gravity a 4.0 y la unidad de distancia a 100.0. La gravedad disminuirá según la ley del cuadrado inverso, entonces en este ejemplo, a 200 pixeles del centro la gravedad será 1.0 px/s² (doble de distancia, 1/4 más gravedad), a 50 píxeles será 16.0 px/s² (mitad de distancia, 4 veces más gravedad), y así sucesivamente.

Lo anterior es cierto solo cuando la unidad de distancia es un número positivo. Cuando está establecido a 0.0, la gravedad será constante independientemente de la distancia.


SpaceOverride gravity_space_override = 0 🔗

Modo de sobrescritura para los cálculos de gravedad dentro de esta área.


float linear_damp = 0.1 🔗

  • void set_linear_damp(value: float)

  • float get_linear_damp()

La tasa a la que los objetos dejan de moverse en esta área. Representa la velocidad lineal perdida por segundo.

Véase ProjectSettings.physics/2d/default_linear_damp para obtener más detalles sobre la amortiguación.


SpaceOverride linear_damp_space_override = 0 🔗

Modo de sobre-escritura para cálculos de amortiguación lineal dentro de esta área.


bool monitorable = true 🔗

  • void set_monitorable(value: bool)

  • bool is_monitorable()

Si es true, otras áreas de monitoreo pueden detectar esta área.


bool monitoring = true 🔗

  • void set_monitoring(value: bool)

  • bool is_monitoring()

Si es true, el área detecta cuerpos o áreas que entran y salen de ella.


int priority = 0 🔗

  • void set_priority(value: int)

  • int get_priority()

La prioridad del área. Las áreas de mayor prioridad se procesan primero. La física de World2D siempre se procesa al final, después de todas las áreas.


Descripciones de Métodos

Array[Area2D] get_overlapping_areas() const 🔗

Devuelve una lista de Area2D que se intersecan. El CollisionObject2D.collision_layer del área superpuesta debe formar parte del CollisionObject2D.collision_mask de esta área para que se detecte.

Por razones de rendimiento (todas las colisiones se procesan al mismo tiempo), esta lista se modifica una vez durante el paso de física, no inmediatamente después de que se muevan los objetos. Considera usar señales en su lugar.


Array[Node2D] get_overlapping_bodies() const 🔗

Devuelve una lista de PhysicsBody2D y TileMap que se intersecan. La capa de colisión del cuerpo superpuesto (CollisionObject2D.collision_layer) debe formar parte de la máscara de colisión de esta área (CollisionObject2D.collision_mask) para poder ser detectado.

Por razones de rendimiento (todas las colisiones se procesan al mismo tiempo), esta lista se modifica una vez durante el paso de física, no inmediatamente después de mover los objetos. Considera utilizar señales en su lugar.


bool has_overlapping_areas() const 🔗

Devuelve true si interseca alguna Area2D, de lo contrario devuelve false. El CollisionObject2D.collision_layer del área superpuesta debe ser parte del CollisionObject2D.collision_mask de esta área para que se detecte.

Por razones de rendimiento (todas las colisiones se procesan al mismo tiempo), la lista de áreas superpuestas se modifica una vez durante el paso de física, no inmediatamente después de que se mueven los objetos. Considera usar señales en su lugar.


bool has_overlapping_bodies() const 🔗

Devuelve true si interseca cualquier PhysicsBody2D o TileMap, de lo contrario devuelve false. El CollisionObject2D.collision_layer del cuerpo superpuesto debe ser parte del CollisionObject2D.collision_mask de esta área para que se detecte.

Por razones de rendimiento (todas las colisiones se procesan al mismo tiempo), la lista de cuerpos superpuestos se modifica una vez durante el paso de física, no inmediatamente después de que se mueven los objetos. Considera usar señales en su lugar.


bool overlaps_area(area: Node) const 🔗

Devuelve true si el Area2D dado interseca o se superpone a este Area2D, false en caso contrario.

Nota: El resultado de esta prueba no es inmediato después de mover objetos. Para mejorar el rendimiento, la lista de superposiciones se actualiza una vez por fotograma y antes del paso de física. Considera usar señales en su lugar.


bool overlaps_body(body: Node) const 🔗

Devuelve true si el cuerpo físico dado intersecciona o se superpone con esta Area2D, false en caso contrario.

Nota: El resultado de esta test no es inmediato después de mover objetos. Por rendimiento, la lista de superposiciones se actualiza una vez por fotograma y antes del paso de física. Considera usar señales en su lugar.

El argumento body puede ser una instancia de PhysicsBody2D o de TileMap. Aunque los TileMaps no son cuerpos físicos en sí mismos, registran sus piezas con formas de colisión como un cuerpo físico virtual.