Area2D
Наследует: CollisionObject2D < Node2D < CanvasItem < Node < Object
Область 2D пространства, которая обнаруживает другие CollisionObject2D, входящие в нее или выходящие из нее.
Описание
Area2D — это область двумерного пространства, определяемая одним или несколькими дочерними узлами CollisionShape2D или CollisionPolygon2D. Он определяет, когда другие CollisionObject2D входят в него или выходят из него, а также отслеживает, какие объекты столкновения еще не вышли из него (т. е. какие из них перекрывают его).
Этот узел также может локально изменять или переопределять физические параметры (гравитация, затухание) и направлять звук на пользовательские аудиошины.
Примечание: Области и тела, созданные с помощью PhysicsServer2D, могут не взаимодействовать с Area2D-ми так, как ожидается, и могут не испускать сигналы или не отслеживать объекты правильно.
Обучающие материалы
Свойства
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
Методы
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 |
Сигналы
Выдается, когда полученный area входит в эту область. Требуется, чтобы monitoring был установлен в true.
Выдается, когда полученная area выходит из этой области. Требует, чтобы monitoring был установлен на true.
area_shape_entered(area_rid: RID, area: Area2D, area_shape_index: int, local_shape_index: int) 🔗
Выдается, когда Shape2D полученного area входит в форму этой области. Требует, чтобы monitoring был установлен в true.
local_shape_index и area_shape_index содержат индексы взаимодействующих фигур из этой области и другой области соответственно. area_rid содержит RID другой области. Эти значения можно использовать с PhysicsServer2D.
Пример: Получить узел CollisionShape2D из индекса формы:
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) 🔗
Выдается, когда Shape2D полученной area выходит из формы этой области. Требует, чтобы monitoring был установлен на true.
См. также area_shape_entered.
Вызывается, когда полученное body попадает в эту область. body может быть PhysicsBody2D или TileMap. TileMap обнаруживаются, если их TileSet имеет настроенные формы столкновений. Требует, чтобы monitoring был установлен на true.
Вызывается, когда полученное body покидает эту область. body может быть PhysicsBody2D или TileMap. TileMap обнаруживаются, если их TileSet имеет настроенные формы столкновений. Требует, чтобы monitoring был установлен на true.
body_shape_entered(body_rid: RID, body: Node2D, body_shape_index: int, local_shape_index: int) 🔗
Вызывается, когда Shape2D полученного body входит в форму этой области. body может быть PhysicsBody2D или TileMap. TileMap обнаруживаются, если их TileSet имеет настроенные формы столкновений. Требует, чтобы monitoring был установлен на true.
local_shape_index и body_shape_index содержат индексы взаимодействующих фигур из этой области и взаимодействующего тела соответственно. body_rid содержит RID тела. Эти значения можно использовать с PhysicsServer2D.
Пример: Получить узел CollisionShape2D из индекса формы:
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) 🔗
Выдается, когда Shape2D полученного body выходит из формы этой области. body может быть PhysicsBody2D или TileMap. TileMap обнаруживаются, если их TileSet имеет настроенные формы столкновений. Требует, чтобы monitoring был установлен на true.
См. также body_shape_entered.
Перечисления
enum SpaceOverride: 🔗
SpaceOverride SPACE_OVERRIDE_DISABLED = 0
Эта область не влияет на гравитацию/демпфирование.
SpaceOverride SPACE_OVERRIDE_COMBINE = 1
Эта область добавляет свои значения гравитации/затухания ко всему, что было рассчитано до сих пор (в порядке priority).
SpaceOverride SPACE_OVERRIDE_COMBINE_REPLACE = 2
Эта область добавляет свои значения гравитации/демпфирования ко всему, что было рассчитано до сих пор (в порядке priority), игнорируя любые области с более низким приоритетом.
SpaceOverride SPACE_OVERRIDE_REPLACE = 3
Эта область заменяет любую гравитацию/демпфирование, даже значения по умолчанию, игнорируя любые области с более низким приоритетом.
SpaceOverride SPACE_OVERRIDE_REPLACE_COMBINE = 4
Эта область заменяет все рассчитанные до сих пор значения гравитации/демпфирования (в порядке priority), но продолжает рассчитывать остальные области.
Описания свойств
Скорость, с которой объекты прекращают вращаться в этой области. Представляет угловую скорость, потерянную в секунду.
Подробнее о затухании см. ProjectSettings.physics/2d/default_angular_damp.
SpaceOverride angular_damp_space_override = 0 🔗
void set_angular_damp_space_override_mode(value: SpaceOverride)
SpaceOverride get_angular_damp_space_override_mode()
Режим переопределения для расчетов углового демпфирования в этой области.
StringName audio_bus_name = &"Master" 🔗
void set_audio_bus_name(value: StringName)
StringName get_audio_bus_name()
Название аудио-шины этой области.
bool audio_bus_override = false 🔗
Если true, аудиошина области переопределяет аудиошину по умолчанию.
Интенсивность гравитации области (в пикселях в секунду в квадрате). Это значение умножает направление гравитации. Это полезно для изменения силы гравитации без изменения ее направления.
Vector2 gravity_direction = Vector2(0, 1) 🔗
Вектор силы тяжести области (не нормализован).
Если true, гравитация рассчитывается из точки (задается через gravity_point_center). См. также gravity_space_override.
Vector2 gravity_point_center = Vector2(0, 1) 🔗
Если гравитация — это точка (см. membergravity_point), то это будет точка притяжения.
float gravity_point_unit_distance = 0.0 🔗
Расстояние, на котором сила гравитации равна gravity. Например, на планете радиусом 100 пикселей с поверхностной силой гравитации 4,0 px/s² установите gravity на 4,0, а единичное расстояние на 100,0. Сила гравитации будет уменьшаться в соответствии с законом обратных квадратов, поэтому в этом примере на расстоянии 200 пикселей от центра сила гравитации будет равна 1,0 px/s² (в два раза больше расстояния, 1/4 силы гравитации), на расстоянии 50 пикселей она будет равна 16,0 px/s² (в два раза больше расстояния, 4x силы гравитации) и т. д.
Вышесказанное верно только в том случае, если единичное расстояние является положительным числом. Если установлено значение 0,0, сила гравитации будет постоянной независимо от расстояния.
SpaceOverride gravity_space_override = 0 🔗
void set_gravity_space_override_mode(value: SpaceOverride)
SpaceOverride get_gravity_space_override_mode()
Режим переопределения для расчетов гравитации в этой области.
Скорость, с которой объекты прекращают движение в этой области. Представляет собой потерю линейной скорости в секунду.
Подробнее о затухании см. ProjectSettings.physics/2d/default_linear_damp.
SpaceOverride linear_damp_space_override = 0 🔗
void set_linear_damp_space_override_mode(value: SpaceOverride)
SpaceOverride get_linear_damp_space_override_mode()
Режим переопределения для расчетов линейного затухания в этой области.
Если true, другие области мониторинга могут обнаружить эту область.
Если true, область обнаруживает входящие и выходящие из нее тела или области.
Приоритет области. Области с более высоким приоритетом обрабатываются в первую очередь. Физика World2D всегда обрабатывается в последнюю очередь, после всех областей.
Описания метода
Array[Area2D] get_overlapping_areas() const 🔗
Возвращает список пересекающихся Area2D. Member CollisionObject2D.collision_layer перекрывающейся области должен быть частью CollisionObject2D.collision_mask этой области, чтобы быть обнаруженным.
Из соображений производительности (все столкновения обрабатываются одновременно) этот список изменяется один раз во время шага физики, а не сразу после перемещения объектов. Рассмотрите возможность использования сигналов вместо этого.
Array[Node2D] get_overlapping_bodies() const 🔗
Возвращает список пересекающихся PhysicsBody2D и TileMap. Member CollisionObject2D.collision_layer перекрывающегося тела должен быть частью CollisionObject2D.collision_mask этой области, чтобы быть обнаруженным.
Из соображений производительности (все столкновения обрабатываются одновременно) этот список изменяется один раз во время шага физики, а не сразу после перемещения объектов. Рассмотрите возможность использования сигналов вместо этого.
bool has_overlapping_areas() const 🔗
Возвращает true, если пересекает какие-либо Area2D-ы, в противном случае возвращает false. Member CollisionObject2D.collision_layer перекрывающейся области должен быть частью CollisionObject2D.collision_mask этой области, чтобы быть обнаруженным.
Из соображений производительности (все столкновения обрабатываются одновременно) список перекрывающихся областей изменяется один раз во время шага физики, а не сразу после перемещения объектов. Рассмотрите возможность использования сигналов вместо этого.
bool has_overlapping_bodies() const 🔗
Возвращает true, если пересекает любые PhysicsBody2D-ы или TileMap-ми, в противном случае возвращает false. Member CollisionObject2D.collision_layer перекрывающего тела должен быть частью CollisionObject2D.collision_mask этой области, чтобы быть обнаруженным.
Из соображений производительности (все столкновения обрабатываются одновременно) список перекрывающихся тел изменяется один раз во время шага физики, а не сразу после перемещения объектов. Рассмотрите возможность использования сигналов вместо этого.
bool overlaps_area(area: Node) const 🔗
Возвращает true, если заданная Area2D пересекает или перекрывает эту Area2D, false в противном случае.
Примечание: Результат этого теста не появляется сразу после перемещения объектов. Для производительности список перекрытий обновляется один раз за кадр и перед шагом физики. Рассмотрите возможность использования сигналов вместо этого.
bool overlaps_body(body: Node) const 🔗
Возвращает true, если указанное физическое тело пересекается или перекрывается с этой областью (Area2D), иначе false.
Примечание: Результат этого теста не обновляется мгновенно после перемещения объектов. Для производительности список перекрытий обновляется один раз за кадр и перед шагом физики. Рекомендуется использовать сигналы.
Аргумент body может быть либо PhysicsBody2D, либо экземпляром TileMap. Хотя TileMap сам по себе не является физическим телом, он регистрирует свои тайлы с коллизиями как виртуальное физическое тело.