У меня проблема с pygame. Я установил окно, которое случайно размещает круги по экрану очень быстро, только для целей тестирования. Существуют также три кнопки: воспроизведение/пауза (переключатели вперед и назад, прекращение появления кругов) и кнопка увеличения скорости и уменьшения скорости. Я не очень опытный с питоном или Pygame, но я придумал эту функцию для создания интерактивных кнопок на экране:Pygame отвечает неправильно на нажатия кнопок
def makeButton(rect, color, hovercolor, text, textsize, textcolor):
clicked = False
for event in pygame.event.get():
if event.type == pygame.MOUSEBUTTONDOWN:
clicked = True
mouse = pygame.mouse.get_pos()
rect = pygame.Rect(rect)
displaycolor = color
if rect.collidepoint(mouse):
displaycolor = hovercolor
buttonSurface = pygame.draw.rect(gameDisplay, displaycolor, rect, 0)
font = pygame.font.Font('freesansbold.ttf',textsize)
TextSurf = font.render(text, True, textcolor)
TextRect = TextSurf.get_rect()
TextRect.center = rect.center
gameDisplay.blit(TextSurf, TextRect)
if clicked:
return True
else:
return False
Эта функция может определенно быть сокращен и упрощен, но он работал меня, до сих пор. Я вынул большой кусок кода, который, как я понял, был бесполезным (имея совершенно другой блок кода для визуализации кнопки при наведении курсора, а не только изменение цвета дисплея). Теперь, всякий раз, когда я нажимаю любую из трех ранее упомянутых кнопок, кажется, что выбрал случайный вариант и вернул True, испортил остальную часть программы. Например, кнопка воспроизведения будет увеличивать скорость один раз, нажатие уменьшает скорость паузы и т. Д. Иногда это делает то, что предполагается, но это кажется случайным.
Некоторой дополнительная информация, если это полезно:
-Эты функция вызывается три раза каждый тик. Он находится внутри цикла, и если он возвращает true, его соответствующие действия должны выполняться (пауза или игра в игру, увеличение/уменьшение скорости).
-Кнопка воспроизведения/паузы - это одна кнопка, которая переключается между зеленым цветом с помощью кнопки «играть» стрелку, а красный - с символом паузы. Это две отдельные кнопки и функции, и только один из них выполняется одновременно.
-У меня почти нет опыта работы с классами, поэтому они могут быть лучше справляться с этой ситуацией.
-Единственное объяснение, которое я могу придумать для этой проблемы, состоит в том, что возвращенные логические элементы смешиваются между различными местами, в которых используется эта функция. Я уверен, что проблема в этом куске кода, но спросите меня, и я отправлю места, которые он назвал.
запускайте его только один раз в каждом тике. Изучайте классы. Теперь вы создаете время действия кнопок на кнопках, но вы можете сделать две поверхности - нормальные и зависающие - только один раз перед циклом. А затем в цикле вы можете разбрызгать различную поверхность, зависящую от 'clicked' – furas