Непрерывное выполнение кода в цикле pygame при единичном нажатии клавиши

Пишу простенькую игру на pygame, что будет подкидывать монету при нажатии на пробел и выдавать рандомно один из двух цветов. По какой то причине при нажатии пробела код видимо не понимает, что надо остановиться и моментально после выдавания мне одной стороны монеты, сразу начинает выдавать следующую и делает это с огромной скоростью до тех пор, пока я не отпущу пробел. В чем может быть дело?


    while carryOn:
        screen.blit(bg, (0, 0))
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                carryOn = False
    
            # Coin Square
            coin = pygame.draw.rect(screen, GREEN, [250, 150, 200, 200], 0)
    
            # Text inside of the first square
            firstTextSize = pygame.font.SysFont('Comic Sans MS', 40)
            firstText = screen.blit(firstTextSize.render('click here', True, (0, 0, 0)), (260, 215))
    
            # Coin flip
            key = pygame.key.get_pressed()
            if key[pygame.K_SPACE]:
                flip = random.randint(0, 1)
    
                if flip == 0:
                    coin = pygame.draw.rect(screen, RED, [250, 150, 200, 200], 0)
    
                else:
                    coin = pygame.draw.rect(screen, BLUE, [250, 150, 200, 200], 0)


Ответы (1 шт):

Автор решения: Тимофей

По идее при нажатии на пробел код не должен уходить в такое бесконечное выполнение как у тебя. Не знаю в чем точная проблема, но можешь попробовать сделать выполнение кода по нажатию мышью на квадрат. Тут проблем таких точно не должно быть


    while carryOn:
        screen.blit(bg, (0, 0))
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                carryOn = False
    
            coin = pygame.draw.rect(screen, GREEN, [250, 150, 200, 200], 0)
    
            firstTextSize = pygame.font.SysFont('Comic Sans MS', 40)
            firstText = screen.blit(firstTextSize.render('click here', True, (0, 0, 0)), (260, 215))
    
            if event.type == pygame.MOUSEBUTTONUP:
                pos = pygame.mouse.get_pos()
    
                if 0 < pos[0] < 0 and 0 < pos[1] < 0: #введи сюда координаты монеты по x y. У тебя в коде не указаны координаты
                    flip = random.randint(0, 1)
    
                    if flip == 0:
                        coin = pygame.draw.rect(screen, RED, [250, 150, 200, 200], 0)
    
                    else:
                        coin = pygame.draw.rect(screen, BLUE, [250, 150, 200, 200], 0)
                    
→ Ссылка