pygame拖动条的实现方法

实现效果如下:

我们以音量的调整为例,首先绘制水平直线与实心圆,具体位置、大小可自己指定:

# 实心圆横坐标位置
VPOS = 300

# 绘制水平直线,参数依次为(surface, color, start_pos, end_pos, width)
pygame.draw.line(self.screen, self.BLUE, (150, 900), (450, 900), 5)
# 绘制实心圆作为按钮,参数依次为(surface, color, center, radius, width)
volume_button = pygame.draw.circle(self.screen, self.GREEN, (VPOS, 900), 10, width=0)

为了拖动手感更好,我们只要按下按键后直到抬起期间均可拖动圆的位置。为此我们设置变量值volume_state,当该值为0时,实心圆不会随着鼠标改变位置;而该值为1时,则会随着鼠标改变。一般状态下该值为0,当鼠标在实心圆上按下时刻我们就令该值为1,直到鼠标抬起,该值变回0。

# 默认为不可调整状态
volume_state = 0

# pygame循环
while running:
    # 当检测到鼠标在按钮处按下,即可调整按钮位置与音量
    if pygame.mouse.get_pressed()[0]:
        if volume_button.collidepoint(pos):
            volume_state = 1

    # 当检测到鼠标抬起,则停止调整,在下一次鼠标按下后不可再变化
    for event in pygame.event.get():
        if event.type == pygame.MOUSEBUTTONUP and volume_state:
            volume_state = 0

    # 获取鼠标当前位置
    pos = pygame.mouse.get_pos()

    # 调整音量具体过程
    if volume_state:
        # 圆的位置与鼠标横坐标位置一致
        VPOS = pos[0]
        # 限制按键圆心位置在水平直线上
        if VPOS > 450:
            VPOS = 450
        elif VPOS < 150:
            VPOS = 150
        # 实际音量值
        volume = (VPOS - 150) / 300.0

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值