У меня есть несколько кнопок, находящихся в классе меню. Я хочу особо отметить кнопки воспроизведения и кнопку возврата. Кнопка воспроизведения отображается в состоянии «main_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"