Godot中批量绑定多个Label的on_mouse_entered与on_mouse_exited信号方案
批量绑定鼠标悬停信号实现Label显隐的两种方案
方案一:自定义Label子类(推荐)
这种方式一劳永逸,所有基于这个子类创建的Label都会自动带有悬停显隐逻辑,不用重复绑定信号。
- 创建一个新的GDScript脚本,内容如下:
extends Label func _ready(): # 初始状态隐藏Label visible = false # 绑定鼠标进入/离开信号到自身处理函数 connect("mouse_entered", self, "_on_mouse_entered") connect("mouse_exited", self, "_on_mouse_exited") func _on_mouse_entered(): visible = true func _on_mouse_exited(): visible = false
- 应用到地图的Label上:
- 对于已有的Label:选中Label,在Inspector面板的「Script」选项中,替换为上面的自定义脚本
- 新建Label时:直接选择这个自定义脚本作为基类
方案二:父节点批量遍历绑定
如果不想修改Label的类,可以把所有需要处理的Label放到同一个父节点下(比如一个名为MapLocationLabels的Node2D),然后给父节点挂载以下脚本:
extends Node2D func _ready(): # 遍历所有子节点,筛选出Label类型的节点 for child in get_children(): if child is Label: # 初始隐藏 child.visible = false # 绑定信号,同时把当前Label作为参数传递给处理函数 child.connect("mouse_entered", self, "_on_label_mouse_entered", [child]) child.connect("mouse_exited", self, "_on_label_mouse_exited", [child]) func _on_label_mouse_entered(target_label: Label): target_label.visible = true func _on_label_mouse_exited(target_label: Label): target_label.visible = false
注意事项
- 确保所有目标Label的
mouse_filter属性未设置为MOUSE_FILTER_IGNORE(默认是MOUSE_FILTER_STOP,可以正常接收鼠标信号) - 如果需要仅在文字区域响应鼠标,可开启Label的
rect_clip_content,或者调整custom_minimum_size匹配文字范围
内容的提问来源于stack exchange,提问作者Andrea
相关产品推荐
相关产品推荐

