Проблема в событии l oop в функции кнопки. Обратите внимание, pygame.event.get()
получает все сообщения и удаляет их из очереди.
Таким образом, 1 кнопка (в основном 1-я кнопка) будет получать события, а другие кнопки - нет Мероприятия.
Удалить pygame.event.get()
с кнопки. Получите события в главном приложении l oop и передайте список событий функции кнопки.
В любом случае вам вообще не понадобится событие l oop в функции кнопки, потому что вы оцениваете состояние кнопок на pygame.mouse.get_pressed()
.
Но я рекомендую использовать событие MOUSEBUTTONDOWN
. См. pygame.event
.
def button(events,msg,x,y,h):
smallText = pygame.font.Font("freesansbold.ttf", 20)
textSurf, textRect = text_objects(msg, smallText, WHITE)
textRect.center = button_rect.center
mouse = pygame.mouse.get_pos()
button_rect = pygame.Rect(x, y, BUTTON_WIDTH, h)
hit = button_rect.collidepoint(mouse)
pygame.draw.rect(screen, BRIGHT_RED if hit else RED, button_rect)
screen.blit(textSurf, textRect)
if hit:
for event in events:
if event.type == pygame.MOUSEBUTTONDOWN and event.button == 1:
return True
def intro_screen():
intro = True
while intro:
events = pygame.event.get()
for event in events:
if event.type == pygame.QUIT:
sys.exit()
screen.fill(GREEN)
if button(events , "2-Player",245,145,BUTTON_HEIGHT):
multiplayer_loop()
if button(events , "1-Player",245,270,BUTTON_HEIGHT):
login_screen(True)
if button(events , "Scores",245,395,40):
login_screen(False)
screen.blit(TITLE, (120, 5))
pygame.display.update()
Обратите внимание, что должен быть только 1 вызов pygame.event.get()
на кадр.