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

调用show()方法后按钮无法识别鼠标悬停状态的问题求助

解决按钮显示后无法识别悬停的问题

问题根源是:按钮通过show()显示时,只有鼠标发生移动才会触发mouse_entered信号,若鼠标停在按钮区域内不动,系统不会自动检测这种状态。下面是两种直接有效的修复方案:

方案1:显示后手动检查鼠标位置

在调用show()的代码后,立刻添加鼠标位置检测逻辑,手动触发悬停相关的信号或状态:

# 示例:假设按钮节点路径是$DelayedButton
$DelayedButton.show()

# 获取按钮的全局范围和鼠标全局位置
var button_global_area = $DelayedButton.get_global_rect()
var current_mouse_pos = get_global_mouse_position()

# 判断鼠标是否在按钮范围内,是则触发悬停逻辑
if button_global_area.has_point(current_mouse_pos):
    $DelayedButton.emit_signal("mouse_entered")
    # 若是自定义按钮,也可直接设置内部悬停状态,比如:
    # $DelayedButton._hover = true
    # $DelayedButton.update()

方案2:自定义按钮重写_show()方法

如果这个按钮是你自定义的,可以把检测逻辑封装到按钮内部,每次显示时自动执行:

extends Button

func _show():
    # 先执行父类的显示逻辑
    super._show()
    
    # 检测鼠标是否在当前按钮的全局范围内
    var global_shape = get_global_shape()
    var mouse_pos = get_global_mouse_position()
    if global_shape.has_point(mouse_pos):
        emit_signal("mouse_entered")
        # 更新按钮内部的悬停状态(按需添加)
        _hover = true
        update()

补充说明

  • 必须用全局坐标做判断,避免局部坐标和鼠标坐标不匹配的问题。
  • 若按钮不是矩形碰撞,用get_global_shape()替代get_global_rect(),保证检测准确性。

内容的提问来源于stack exchange,提问作者1MVA1

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 00:32:38