pygame鼠标单击|在音乐播放中切换播放暂停

时间:2019-02-01 13:32:28

标签: python pygame logic

我正在尝试制作音乐播放系统。我制作了一个名为Circle的类,它定义了按钮及其属性,该类具有一个名为click()的方法,该方法可以检测是否单击了屏幕中的特定区域。

 def click(self):
    """
        In general, point x and y must satisfy (x - center_x)^2 + (y - center_y)^2 <= radius^2
    """
    current_mouse_position = pygame.mouse.get_pos()
    value_of_equation_at_current_mouse_position = (current_mouse_position[0]-self.x)**2+(current_mouse_position[1]-self.y)**2
    if (value_of_equation_at_current_mouse_position <= self.radius**2):
        if pygame.mouse.get_pressed()[0]:
            return True
    else:
        return False

我想在单击时切换播放和暂停按钮。 我的逻辑:

 if btn_play.click():
    if togglePlayaPause == 1:
        if paused:
            pygame.mixer.music.unpause()
        else:
            pygame.mixer.music.play()

        played = 1
        togglePlayaPause = togglePlayaPause ^ 1
        pygame.time.wait(250)
        print("clicked")
        a = 0
        b = 1024
        paused = False


if togglePlayaPause == 0:
    pygame.time.wait(550)

    if btn_pause.click():
        pygame.mixer.music.pause()
        print("paused")

        paused = True
        newSong = 0
        played = 0
        togglePlayaPause = togglePlayaPause ^ 1
        pygame.time.wait(250)

if togglePlayaPause == 1:
    btn_play.draw()
else:
    btn_pause.draw()

由于“播放”和“暂停”按钮都位于同一坐标上,因此clik()方法对两者均返回true,并且两个if语句均执行,因此音乐在播放一段时间后会暂停。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

如果togglePlayaPause为1,则必须评估btn_play,否则,如果togglePlayaPause为0,则必须评估btn_pause

使用if elif else语句来这样做:

if togglePlayaPause == 0:
    if btn_play.click():
        if paused:
            pygame.mixer.music.unpause()
        else:
            pygame.mixer.music.play()
        # [...]

elif togglePlayaPause == 1:
    pygame.time.wait(550)

    if btn_pause.click():
        pygame.mixer.music.pause()
        # [...]

if togglePlayaPause == 0:

    # [...]

else: # togglePlayaPause is either 0 or 1

    # [...]