Pygame: key.get_pressed () не совпадает с очередью событий

Я пытаюсь разработать простые элементы управления для приложения, использующего Pygame в Python. У меня все работает, но я попадаю в странную стену: я использую клавиши со стрелками для управления своим персонажем. Если я удерживаю одну клавишу со стрелкой, а затем удерживаю другую клавишу со стрелкой (для перемещения по диагонали), персонаж перемещается, как и ожидалось. Однако, если я выпущуsecond ключ, который я нажал (все еще удерживаяfirst клавиша), персонаж перестает двигаться, хотя я все еще удерживаю эту первую клавишу. Вот мой простой код движения:

for event in pygame.event.get():
    if event.type == QUIT:
        pygame.quit()
        sys.exit()
    elif event.type == KEYDOWN:
        if pygame.key.get_pressed()[K_LEFT]:
            player.pos = (player.pos[0] - 2, player.pos[1])
        if pygame.key.get_pressed()[K_RIGHT]:
            player.pos = (player.pos[0] + 2, player.pos[1])
        if pygame.key.get_pressed()[K_UP]:
            player.pos = (player.pos[0], player.pos[1] - 2)
        if pygame.key.get_pressed()[K_DOWN]:
            player.pos = (player.pos[0], player.pos[1] + 2)

Теперь я был очень смущен этим. Поэтому я попытался напечатать несколько строк для отладки. В верхней части основного цикла управления я написал:

print (pygame.key.get_pressed()[K_DOWN], pygame.key.get_pressed()[K_RIGHT])
print pygame.event.get()

... чтобы вывести кортеж, отображающий состояние клавиш со стрелками вниз и вправо, а затем отобразить очередь событий Pygame. Мои результаты сбили меня с толку еще больше. Если я перемещаю символ по диагонали вниз и вправо, нажимая сначала клавишу «вниз», а затем правую клавишу,then отпустите правую клавишу, чтобы она двигалась просто вниз, персонаж перестает двигаться, как раньше ... но это выводится на оболочку:

(1, 0)
[]

То есть когда яrelease клавиша со стрелкой вправо и удерживающая клавишу со стрелкой вниз, pygame.key.get_pressed () понимает, что клавиша со стрелкой вниз все еще удерживается, но в очереди событий ничего нет.

Кроме того, ранее в коде (до цикла управления) я вызываю

pygame.key.set_repeat(1, 2)

чтобы персонаж продолжал двигаться, пока нажата клавиша.

Любая помощь будет оценена! Спасибо :)

Ответы на вопрос(4)

Ваш ответ на вопрос