实现效果如下:
我们以音量的调整为例,首先绘制水平直线与实心圆,具体位置、大小可自己指定:
# 实心圆横坐标位置
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