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