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

Godot 3.5中检测鼠标移动以拖动调整音量进度条

在Godot 3.5中实现进度条拖动调节音量的方法

不用定时器那套复杂逻辑,直接通过监听GUI节点的鼠标事件就能实现实时平滑的拖动调节。下面是具体实现步骤:

  1. 给你的ProgressBar节点启用鼠标交互:

    • 选中进度条节点,在检查器里找到Mouse Filter属性,设置为MOUSE_FILTER_STOP,确保它能接收鼠标事件。
  2. 给进度条添加如下脚本:

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 19:58:28