You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Godot中批量绑定多个Label的on_mouse_entered与on_mouse_exited信号方案

批量绑定鼠标悬停信号实现Label显隐的两种方案

方案一:自定义Label子类(推荐)

这种方式一劳永逸,所有基于这个子类创建的Label都会自动带有悬停显隐逻辑,不用重复绑定信号。

  1. 创建一个新的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
  1. 应用到地图的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 23:30:49