Вот моя check_for_pause функция():Почему моя система паузы не работает? (Pygame)
#Check if the user is trying to pause the game
def check_for_pause():
keys=pygame.key.get_pressed() #Get status of all keys
if keys[K_SPACE]: #The space bar is held down
global paused #Make global so it can be edited
if paused==True: #It was paused, so unpause it
paused=False
elif paused==False: #It was playing, so pause it
paused=True
#Don't let the main loop continue until the space bar has been released again, otherwise the variable will flicker between True and False where the loop runs so fast!
space_bar_pressed=keys[K_SPACE]
while space_bar_pressed: #Repeat this loop until space_bar_pressed is False
keys=pygame.key.get_pressed()
if not keys[K_SPACE]: #Space bar has been released so set space_bar_pressed to False
space_bar_pressed=False
однако это продолжает делать моя программа перестает отвечать на запросы, когда я пытаюсь сделать паузу! В принципе, я хочу, чтобы переменная «paused» была либо True, либо False. Когда нажимается пробел, он должен измениться в зависимости от того, в каком он сейчас нет. Поскольку я использую check_for_pause() в другом бесконечном цикле, мне нужно сделать так, чтобы функция прекращала выполнение только при освобождении пробела, иначе, если пользователь удерживает пробел более чем на долю секунды, он будет переключение между True и False.
Любые идеи, почему моя программа становится неактуальной, когда я запускаю это? Я знаю, что это связано с бит, который ждет, пока пробел не будет выпущен, потому что, когда я удаляю этот бит кода, моя программа работает нормально (но, очевидно, функция паузы не работает).
Есть ли причина, по которой вы не используете очередь событий? Когда нажата клавиша, событие * single * для этого ключа отправляется в очередь, то же самое, когда он отпускается. Использование очереди будет гарантировать, что ваш переключатель паузы будет запущен только один раз. –
«однако это продолжает заставлять мою программу не реагировать, когда я пытаюсь ее приостановить!» Ну, конечно. Вы запускаете цикл, который не возвращается, пока вы не отпустите пробел, поэтому программа не может реагировать ни на что другое, потому что она все еще работает с кодом в цикле. – abarnert
(И это точно _why_ вы должны использовать дизайн цикла событий для почти любого графического приложения.) – abarnert