Python Pygame:当我按住鼠标时,屏幕会闪烁,但只有一个特定的按钮

Python Pygame:当我按住鼠标时,屏幕会闪烁,但只有一个特定的按钮,python,pygame,mouseevent,Python,Pygame,Mouseevent,我在一个菜单类中有多个按钮。我想特别指出的是播放按钮和后退按钮。播放按钮出现在“主菜单”状态,单击后,状态变为“难度菜单”。后退按钮的作用正好相反;难度菜单到主菜单。应注意,播放按钮和后退按钮位于屏幕上的两个不同位置 当我按下播放按钮时,一切正常。下面的按钮没有被点击,屏幕也不会闪烁。但是,当我按下后退按钮时,屏幕会快速闪烁。我要么在主菜单中结束,要么在难度菜单中结束,这取决于我释放鼠标的时间 我可能忽略了一些次要的东西,但我就是不知道它是什么。下面是与问题相关的所有代码和方法调用。我确信其他方

我在一个菜单类中有多个按钮。我想特别指出的是播放按钮和后退按钮。播放按钮出现在“主菜单”状态,单击后,状态变为“难度菜单”。后退按钮的作用正好相反;难度菜单到主菜单。应注意,播放按钮和后退按钮位于屏幕上的两个不同位置

当我按下播放按钮时,一切正常。下面的按钮没有被点击,屏幕也不会闪烁。但是,当我按下后退按钮时,屏幕会快速闪烁。我要么在主菜单中结束,要么在难度菜单中结束,这取决于我释放鼠标的时间

我可能忽略了一些次要的东西,但我就是不知道它是什么。下面是与问题相关的所有代码和方法调用。我确信其他方法不是问题,因为播放和后退按钮的代码是相同的

game.py

if self.menu.state == "main_menu":
    self.menu.check_hover(mouse)
    if event.type == pygame.MOUSEBUTTONDOWN and event.button == 1:
        self.menu.check_click(event.pos)
    elif event.type == pygame.MOUSEBUTTONUP and event.button == 1:
        self.menu.play_button.l_click = False
elif self.menu.state == "difficulty_menu":
    self.menu.check_hover(mouse)
    if event.type == pygame.MOUSEBUTTONDOWN and event.button == 1:
        self.menu.check_click(event.pos)
    elif event.type == pygame.MOUSEBUTTONUP and event.button == 1:
        self.menu.easy_button.l_click = False
        self.menu.medium_button.l_click = False
        self.menu.hard_button.l_click = False
        self.menu.back_button.l_click = False
def check_hover(self, mouse):
    """
    Buttons are checked to see if they are being hovered over.
    If so, the button color changes.
    """
    if self.state == "main_menu":
        self.play_button.check_hover(mouse)
        self.about_button.check_hover(mouse)
        self.credits_button.check_hover(mouse)
        self.quit_button.check_hover(mouse)
    elif self.state == "difficulty_menu":
        self.easy_button.check_hover(mouse)
        self.medium_button.check_hover(mouse)
        self.hard_button.check_hover(mouse)
        self.back_button.check_hover(mouse)

def check_click(self, pos):
    """
    Buttons are checked to see if they have been clicked.
    """
    if self.state == "main_menu":
        self.play_button.check_left_click(pos)
        self.about_button.check_left_click(pos)
        self.credits_button.check_left_click(pos)
        self.quit_button.check_left_click(pos)
    elif self.state == "difficulty_menu":
        self.easy_button.check_left_click(pos)
        self.medium_button.check_left_click(pos)
        self.hard_button.check_left_click(pos)
        self.back_button.check_left_click(pos)

def update(self):
    """
    The state changes depending on if a button has been clicked.
    """
    if self.state == "main_menu":
        if self.play_button.l_click:
            self.state = "difficulty_menu"
        elif self.about_button.l_click:
            self.state = "about_menu"
        elif self.credits_button.l_click:
            self.state = "credits_menu"
        elif self.quit_button.l_click:
            pygame.quit()
            sys.exit()
    elif self.state == "difficulty_menu":
        if self.easy_button.l_click:
            self.difficulty = "easy"
            self.state = "hidden"
        elif self.medium_button.l_click:
            self.difficulty = "medium"
            self.state = "hidden"
        elif self.hard_button.l_click:
            self.difficulty = "hard"
            self.state = "hidden"
        elif self.back_button.l_click:
            self.state = "main_menu"
菜单.py

if self.menu.state == "main_menu":
    self.menu.check_hover(mouse)
    if event.type == pygame.MOUSEBUTTONDOWN and event.button == 1:
        self.menu.check_click(event.pos)
    elif event.type == pygame.MOUSEBUTTONUP and event.button == 1:
        self.menu.play_button.l_click = False
elif self.menu.state == "difficulty_menu":
    self.menu.check_hover(mouse)
    if event.type == pygame.MOUSEBUTTONDOWN and event.button == 1:
        self.menu.check_click(event.pos)
    elif event.type == pygame.MOUSEBUTTONUP and event.button == 1:
        self.menu.easy_button.l_click = False
        self.menu.medium_button.l_click = False
        self.menu.hard_button.l_click = False
        self.menu.back_button.l_click = False
def check_hover(self, mouse):
    """
    Buttons are checked to see if they are being hovered over.
    If so, the button color changes.
    """
    if self.state == "main_menu":
        self.play_button.check_hover(mouse)
        self.about_button.check_hover(mouse)
        self.credits_button.check_hover(mouse)
        self.quit_button.check_hover(mouse)
    elif self.state == "difficulty_menu":
        self.easy_button.check_hover(mouse)
        self.medium_button.check_hover(mouse)
        self.hard_button.check_hover(mouse)
        self.back_button.check_hover(mouse)

def check_click(self, pos):
    """
    Buttons are checked to see if they have been clicked.
    """
    if self.state == "main_menu":
        self.play_button.check_left_click(pos)
        self.about_button.check_left_click(pos)
        self.credits_button.check_left_click(pos)
        self.quit_button.check_left_click(pos)
    elif self.state == "difficulty_menu":
        self.easy_button.check_left_click(pos)
        self.medium_button.check_left_click(pos)
        self.hard_button.check_left_click(pos)
        self.back_button.check_left_click(pos)

def update(self):
    """
    The state changes depending on if a button has been clicked.
    """
    if self.state == "main_menu":
        if self.play_button.l_click:
            self.state = "difficulty_menu"
        elif self.about_button.l_click:
            self.state = "about_menu"
        elif self.credits_button.l_click:
            self.state = "credits_menu"
        elif self.quit_button.l_click:
            pygame.quit()
            sys.exit()
    elif self.state == "difficulty_menu":
        if self.easy_button.l_click:
            self.difficulty = "easy"
            self.state = "hidden"
        elif self.medium_button.l_click:
            self.difficulty = "medium"
            self.state = "hidden"
        elif self.hard_button.l_click:
            self.difficulty = "hard"
            self.state = "hidden"
        elif self.back_button.l_click:
            self.state = "main_menu"

我意识到我做错了什么。在menu.update()中,如果“播放”或“后退”按钮的l_click为true,则我更改了状态。然后,在game.py中,我检查状态条件。状态已更改,因此程序无法将play_button.l_click或stop_button.l_click设置为False。我通过在菜单中创建一个名为no_click()的新方法修复了这个问题,该方法将所有button.l_clicks设置为False。我在game.py中的每个状态条件中都调用了这个方法