Godot 3.5中检测鼠标移动以拖动调整音量进度条
在Godot 3.5中实现进度条拖动调节音量的方法
不用定时器那套复杂逻辑,直接通过监听GUI节点的鼠标事件就能实现实时平滑的拖动调节。下面是具体实现步骤:
给你的
ProgressBar节点启用鼠标交互:- 选中进度条节点,在检查器里找到
Mouse Filter属性,设置为MOUSE_FILTER_STOP,确保它能接收鼠标事件。
- 选中进度条节点,在检查器里找到
给进度条添加如下脚本:
extends ProgressBar var is_dragging = false func _ready(): # 初始化进度条值与系统音量同步 # 注:AudioServer的音量范围是-80(静音)到0(最大),转成0-80的进度条范围更直观 max_value = 80 value = AudioServer.get_bus_volume_db(0) + 80 func _gui_input(event): # 处理鼠标左键点击 if event is InputEventMouseButton: if event.button_index == BUTTON_LEFT: if event.pressed: # 确认点击在进度条范围内才启动拖动 if Rect2(rect_position, rect_size).has_point(event.position): is_dragging = true update_volume_from_mouse(event.position) else: is_dragging = false # 处理鼠标拖动(仅在拖动状态时响应) elif event is InputEventMouseMotion and is_dragging: update_volume_from_mouse(event.position) func update_volume_from_mouse(mouse_pos: Vector2): # 计算鼠标在进度条内的相对位置比例 var relative_ratio = mouse_pos.x / rect_size.x # 限制比例在0-1之间,防止超出进度条范围 relative_ratio = clamp(relative_ratio, 0, 1) # 更新进度条数值 value = relative_ratio * max_value # 转换为AudioServer需要的分贝值并设置音量 var target_volume_db = value - 80 AudioServer.set_bus_volume_db(0, target_volume_db)
关键说明:
- 使用
_gui_input而非全局_input,能确保只有当前进度条节点接收到鼠标事件,避免和其他GUI元素冲突。 - 拖动状态通过
is_dragging变量跟踪,只有按下左键且在进度条内才启动拖动,松开后停止。 - 直接根据鼠标在进度条内的相对位置计算数值,完全实时响应,没有延迟,实现平滑调节。
内容的提问来源于stack exchange,提问作者AdityaM
相关产品推荐
相关产品推荐

