我在菜单类中有多个按钮。我要特别指出的是播放按钮和后退按钮。播放按钮以“ main_menu”状态出现,单击时将状态更改为“ difficulty_menu”。后退按钮的作用恰好相反。难度菜单到主菜单。请注意,播放按钮和后退按钮位于屏幕上的两个不同位置。
当我按住播放按钮时,一切都会按预期进行。未单击下面的按钮,并且屏幕没有闪烁。但是,当我按住后退按钮时,屏幕会快速闪烁。根据我释放鼠标的时间,我要么进入主菜单,要么进入难度菜单。
我可能忽略了一些小问题,但我只是想不出它是什么。下面是与该问题相关的所有代码和方法调用。我确定其他方法不是问题,因为那里的播放和后退按钮的代码是相同的。
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
menu.py
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"
答案 0 :(得分:0)
我意识到自己做错了。在menu.update()中,如果l_click对于播放或后退按钮为true,则更改状态。然后,在game.py中,我正在检查状态条件。状态已经更改,因此程序无法将play_button.l_click或stop_button.l_click设置为False。我通过在名为no_click()的菜单中创建一个将所有button.l_clicks设置为False的新方法来解决此问题。我在game.py的每个状态条件下都调用了此方法。