调用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
相关产品推荐
相关产品推荐

