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...
Area2D
Hérite de : CollisionObject2D < Node2D < CanvasItem < Node < Object
Une région d'espace 2D qui détecte d'autres CollisionObject2Ds qui en entrent ou en sortent.
Description
Area2D est une région d'espace 2D définie par un ou plusieurs nœuds enfant CollisionShape2D or CollisionPolygon2D. Elle détecte quand d'autres CollisionObject2Ds en entrent ou en sortent, et elle garde également la trace de quels objets de collision n'en sont pas encore sortis (c.-à-d. lesquels la chevauche).
Ce nœud peut également modifier ou redéfinir localement les paramètres physiques (gravité, amortissement) et dévier l'audio vers des bus audio personnalisés.
Note: Les zones et corps créés avec PhysicsServer2D peuvent ne pas interagir comme prévu avec les Area2Ds, et peuvent ne pas émettre des signaux ou suivre des objets correctement.
Tutoriels
Propriétés
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
Méthodes
get_overlapping_areas() const |
|
get_overlapping_bodies() const |
|
has_overlapping_areas() const |
|
has_overlapping_bodies() const |
|
overlaps_area(area: Node) const |
|
overlaps_body(body: Node) const |
Signaux
Émis quand la zone area reçue entre dans cette zone. Nécessite que monitoring soit défini à true.
Émis quand la zone area reçue quitte cette zone. Nécessite que monitoring soit défini à true.
area_shape_entered(area_rid: RID, area: Area2D, area_shape_index: int, local_shape_index: int) 🔗
Émis lorsqu'une Shape2D de la zone area reçue entre dans une forme de cette zone. Nécessite que monitoring soit défini à true.
local_shape_index et area_shape_index contiennent les indices des formes en interaction de cette zone et de l'autre, respectivement. area_rid contient le RID de l'autre zone. Ces valeurs peuvent être utilisées avec le PhysicsServer2D.
Exemple : Obtenez le nœud CollisionShape2D depuis l'index de forme :
var proprietaire_autre_forme = area.shape_find_owner(area_shape_index)
var noeud_autre_forme = area.shape_owner_get_owner(proprietaire_autre_forme)
var proprietaire_forme_locale = shape_find_owner(local_shape_index)
var noeud_forme_locale = shape_owner_get_owner(proprietaire_forme_locale)
area_shape_exited(area_rid: RID, area: Area2D, area_shape_index: int, local_shape_index: int) 🔗
Émis lorsqu'une Shape2D de la zone area reçue sort d'une forme de cette zone. Nécessite que monitoring soit défini à true.
Voir aussi area_shape_entered.
Émis lorsque le corps body reçu entre dans cette zone. body peut être un PhysicsBody2D ou une TileMap. Les TileMaps sont détectées si leur TileSet a des formes de collision configurées. Nécessite que monitoring soit défini à true.
Émis lorsque le corps body reçu quitte cette zone. body peut être un PhysicsBody2D ou une TileMap. Les TileMaps sont détectées si leur TileSet a des formes de collision configurées. Nécessite que monitoring soit défini à true.
body_shape_entered(body_rid: RID, body: Node2D, body_shape_index: int, local_shape_index: int) 🔗
Émis lorsqu'une Shape2D du corps body reçu entre dans une forme de cette zone. body peut être un PhysicsBody2D ou une TileMap. Les TileMaps sont détectées si leur TileSet a des formes de collision configurées. Nécessite que monitoring soit défini à true.
local_shape_index et body_shape_index contiennent les indices des formes en interaction de cette zone et du corps en interaction, respectivement. body_rid contient le RID du corps. Ces valeurs peuvent être utilisées avec le PhysicsServer2D.
Exemple : Obtenez le nœud CollisionShape2D depuis l'index de forme :
var proprietaire_forme_du_corps = body.shape_find_owner(body_shape_index)
var noeud_forme_du_corps = body.shape_owner_get_owner(proprietaire_forme_du_corps)
var proprietaire_forme_locale = shape_find_owner(local_shape_index)
var noeud_forme_locale = shape_owner_get_owner(proprietaire_forme_locale)
body_shape_exited(body_rid: RID, body: Node2D, body_shape_index: int, local_shape_index: int) 🔗
Émis lorsqu'une Shape2D du corps body reçu sort d'une forme de cette zone. body peut être un PhysicsBody2D ou une TileMap. Les TileMaps sont détectées si leur TileSet a des formes de collision configurées. Nécessite que monitoring soit défini à true.
Voir aussi body_shape_entered.
Énumérations
enum SpaceOverride: 🔗
SpaceOverride SPACE_OVERRIDE_DISABLED = 0
Cette aire n'influe pas sur la gravité/amortissement.
SpaceOverride SPACE_OVERRIDE_COMBINE = 1
Cette zone ajoute les valeurs de gravité/amortissement à tout ce qui a été calculé jusqu'à présent (dans l'ordre de priority).
SpaceOverride SPACE_OVERRIDE_COMBINE_REPLACE = 2
Cette zone ajoute sa valeur de gravité/amortissement à tout ce qui a été calculé pour le moment (dans l'ordre de priority), en ignorant les zones de plus basse priorité.
SpaceOverride SPACE_OVERRIDE_REPLACE = 3
Cette zone remplace n'importe quelle gravité/amortissement, même les valeurs par défaut, en ignorant les zones de plus basse priorité.
SpaceOverride SPACE_OVERRIDE_REPLACE_COMBINE = 4
Cette zone remplace n'importe quelle gravité/amortissement calculé pour le moment (dans l'ordre de priority), mais continue de calculer le reste des zones.
Descriptions des propriétés
La vitesse à laquelle les objets arrêtent de tourner dans cette zone. Représente la vitesse angulaire perdue par seconde.
Voir ProjectSettings.physics/2d/default_angular_damp pour plus de détails sur l'amortissement.
SpaceOverride angular_damp_space_override = 0 🔗
void set_angular_damp_space_override_mode(value: SpaceOverride)
SpaceOverride get_angular_damp_space_override_mode()
Mode de redéfinition pour les calculs d'amortissement angulaire dans cette zone.
StringName audio_bus_name = &"Master" 🔗
void set_audio_bus_name(value: StringName)
StringName get_audio_bus_name()
Le nom du bus audio de l'aire.
bool audio_bus_override = false 🔗
Si true, le bus audio de la zone remplace le bus audio par défaut.
L'intensité de gravité de la zone (en pixels par seconde au carré). Cette valeur multiplie la direction de la gravité. Ceci est utile pour modifier la force de la gravité sans modifier sa direction.
Vector2 gravity_direction = Vector2(0, 1) 🔗
Le vecteur de gravité de la zone (non normalisé).
Si true, la gravité est calculée à partir d'un point (défini via gravity_point_center). Voir aussi gravity_space_override.
Vector2 gravity_point_center = Vector2(0, 1) 🔗
Si la gravité est un point (voir gravity_point), ce sera le point d'attraction.
float gravity_point_unit_distance = 0.0 🔗
La distance à laquelle la force de la gravité est égale à gravity. Par exemple, sur une planète de 100 mètres de rayon avec une gravité de surface de 4.0 px/s², définissez la gravity à 4.0 et la distance unité à 100.0. La gravité aura une décroissance selon la loi carrée inverse, donc dans l'exemple, à 200 pixels du centre la gravité sera de 1.0 px/s² (deux fois la distance, 1/4 de la gravité), à 50 pixels elle sera de 16.0 px/s² (la moitié de la distance, 4x la gravité), et ainsi de suite.
L’exemple ci-dessus est vrai seulement lorsque la distance unité est un nombre positif. Lorsque elle est fixée à 0.0, la gravité sera constante indépendamment de la distance.
SpaceOverride gravity_space_override = 0 🔗
void set_gravity_space_override_mode(value: SpaceOverride)
SpaceOverride get_gravity_space_override_mode()
Mode de redéfinition pour les calculs de gravité dans cette zone.
La vitesse à laquelle les objets arrêtent de se déplacer dans cette zone. Représente la vitesse linéaire perdue par seconde.
Voir ProjectSettings.physics/2d/default_linear_damp pour plus de détails sur l'amortissement.
SpaceOverride linear_damp_space_override = 0 🔗
void set_linear_damp_space_override_mode(value: SpaceOverride)
SpaceOverride get_linear_damp_space_override_mode()
Mode de redéfinition pour les calculs d'amortissement linéaire dans cette zone.
Si true, les autres aires surveillantes peuvent détecter cette aire.
Si true, l'aire détecte les corps qui y entrent ou qui en sortent.
La priorité de la zone. Les zones de plus haute priorité seront traitées en premier. La physique du World2D est toujours traitée en dernier, après toutes les zones.
Descriptions des méthodes
Array[Area2D] get_overlapping_areas() const 🔗
Renvoie une liste des Area2D qui s'intersectent. Le CollisionObject2D.collision_layer de l'aire intersectant doit faire partie du CollisionObject2D.collision_mask de cette aire pour être détecté.
Pour des raisons de performance (les collisions sont toutes traitées en même temps) cette liste est modifiée une fois pendant l'étape physique, pas immédiatement après le déplacement des objets. Considérez plutôt utiliser des signaux.
Array[Node2D] get_overlapping_bodies() const 🔗
Renvoie la liste des PhysicsBody2Ds et TileMaps en intersection. La couche CollisionObject2D.collision_layer du corps chevauchant doit être dans le masque CollisionObject2D.collision_mask de cette zone pour être détecté.
Pour des raisons de performance (les collisions sont toutes traitées en même temps) cette liste est modifiée une fois pendant l'étape physique, pas immédiatement après le déplacement des objets. Considérez plutôt utiliser des signaux.
bool has_overlapping_areas() const 🔗
Renvoie true si la zone chevauche n'importe quelle Area2D, sinon renvoie false. La couche CollisionObject2D.collision_layer de la zone chevauchante doit faire partie du CollisionObject2D.collision_mask de cette zone afin d'être détecté.
Pour des raisons de performance (les collisions sont toutes traitées en même temps), cette liste est modifiée une fois pendant l'étape physique, mais pas immédiatement après le déplacement des objets. Envisagez d'utiliser des signaux à la place.
bool has_overlapping_bodies() const 🔗
Renvoie true si la zone intersecte au moins un PhysicsBody2D ou une TileMap, sinon renvoie false. La couche CollisionObject2D.collision_layer du corps chevauchant doit faire partie du masque de collision CollisionObject2D.collision_mask de cette zone pour être détecté.
Pour des raisons de performance (les collisions sont toutes traitées en même temps), cette liste est modifiée une fois pendant l'étape physique, mais pas immédiatement après le déplacement des objets. Envisagez d'utiliser des signaux à la place.
bool overlaps_area(area: Node) const 🔗
Renvoie true si l'Area2D donnée intersecte ou chevauche cette Area2D, false sinon.
Note : Le résultat de ce test n'est pas immédiat après le déplacement des objets. Pour les performances, la liste des chevauchements est mise à jour une fois par trame et avant l'étape physique. Envisagez d'utiliser des signaux à la place.
bool overlaps_body(body: Node) const 🔗
Renvoie true si le corps physique donné intersecte ou chevauche cette Area2D, false sinon.
Note : Le résultat de ce test n'est pas immédiat après le déplacement des objets. Pour les performances, la liste des chevauchements est mise à jour une fois par trame et avant l'étape physique. Envisagez d'utiliser des signaux à la place.
L'argument body peut être une instance de PhysicsBody2D ou de TileMap. Bien que les TileMaps ne sont pas des corps physiques elles-mêmes, elles enregistrent leurs tuiles avec des formes de collision comme un corps physique virtuel.