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)
чтобы персонаж продолжал двигаться, пока нажата клавиша.
Любая помощь будет оценена! Спасибо :)