Непрерывное выполнение кода в цикле 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)