Godot:area_entered() 信号未针对重叠区域触发
Godot: area_entered() signal not fired for overlapping areas
我有一个捕捉到瓦片地图网格的荧光笔 Area2D(想想指向特定瓦片的手电筒),我想让它使用 area_entered() 检测当前突出显示的区域和 area_exited() 信号:
# Highlighter.gd
extends Area2D
var highlighted_area
_on_Highlighter_area_entered(area):
highlighted_area = area
_on_Highlighter_area_exited(area):
highlighted_area = null
这是按预期工作的,除了当我从一个区域移动到重叠区域时。在这种情况下,退出信号会触发,但相邻(重叠)区域的进入信号不会触发,因此 highlighted_area 将卡在 null。见下图:
为什么重叠区域不触发输入信号?有什么想法可以让信号正常工作吗?
仔细检查 Area2D
的 monitoring
和 monitorable
属性。
另外,请注意您在脚本中只存储了一个区域。因此,如果它注册了一个区域,而另一个区域进入,它将覆盖第一个区域。此外,如果存在一个区域,即使仍有区域重叠,您也将为空。
当然,您可以保留当前重叠区域的数组。
不过,我想提出一些不同的建议。如果您想找出给定点上有什么,可以使用 intersect_point
。示例:
var space = get_world_2d().direct_space_state
var mouse_pos = get_global_mouse_position()
var results = space.intersect_point(mouse_pos, 32, [], 2147483647, false, true)
for result in results:
print(result.collider)
这里我们要求最多 32
次碰撞,不排除 ([]
),在每一层 (2147483647
),不包括物体 false
,以及包括地区 true
.
我有一个捕捉到瓦片地图网格的荧光笔 Area2D(想想指向特定瓦片的手电筒),我想让它使用 area_entered() 检测当前突出显示的区域和 area_exited() 信号:
# Highlighter.gd
extends Area2D
var highlighted_area
_on_Highlighter_area_entered(area):
highlighted_area = area
_on_Highlighter_area_exited(area):
highlighted_area = null
这是按预期工作的,除了当我从一个区域移动到重叠区域时。在这种情况下,退出信号会触发,但相邻(重叠)区域的进入信号不会触发,因此 highlighted_area 将卡在 null。见下图:
为什么重叠区域不触发输入信号?有什么想法可以让信号正常工作吗?
仔细检查 Area2D
的 monitoring
和 monitorable
属性。
另外,请注意您在脚本中只存储了一个区域。因此,如果它注册了一个区域,而另一个区域进入,它将覆盖第一个区域。此外,如果存在一个区域,即使仍有区域重叠,您也将为空。
当然,您可以保留当前重叠区域的数组。
不过,我想提出一些不同的建议。如果您想找出给定点上有什么,可以使用 intersect_point
。示例:
var space = get_world_2d().direct_space_state
var mouse_pos = get_global_mouse_position()
var results = space.intersect_point(mouse_pos, 32, [], 2147483647, false, true)
for result in results:
print(result.collider)
这里我们要求最多 32
次碰撞,不排除 ([]
),在每一层 (2147483647
),不包括物体 false
,以及包括地区 true
.