Pygame: key.get_pressed () nie pokrywa się z kolejką zdarzeń

Próbuję opracować proste elementy sterujące dla aplikacji używającej pygame w Pythonie. Mam podstawy, ale uderzam w dziwną ścianę: używam strzałek, aby kontrolować moją postać. Jeśli przytrzymam jeden klawisz ze strzałką, a następnie przytrzymam inny klawisz strzałki (aby poruszać się po przekątnej), postać porusza się zgodnie z oczekiwaniami. Jeśli jednak zwolniędruga klawisz, który nacisnąłem (nadal przytrzymując klawiszpierwszy klawisz), postać przestaje się ruszać, mimo że nadal trzymam ten pierwszy klawisz. Oto mój prosty kod ruchu:

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)

Teraz byłem tym bardzo zdezorientowany. Próbowałem więc wydrukować kilka linii do debugowania. W górnej części głównej pętli sterowania napisałem:

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

... aby wyświetlić krotkę wyświetlającą stan klawiszy strzałek w dół i w prawo, a następnie wyświetl kolejkę zdarzeń pygame. Moje wyniki jeszcze bardziej mnie zaskoczyły. Jeśli przesunę postać po przekątnej w dół i w prawo, najpierw naciskając dolny klawisz, a następnie prawy klawisz,następnie zwolnij prawy klawisz, aby przesunąć go w dół, postać przestaje się poruszać jak poprzednio ... ale to jest drukowane do powłoki:

(1, 0)
[]

To znaczy, kiedy jawydanie prawy klawisz strzałki i nadal przytrzymaj klawisz strzałki w dół, pygame.key.get_pressed () rozumie, że klawisz strzałki w dół jest nadal przytrzymywany, ale w kolejce zdarzeń nie ma nic.

Również wcześniej w kodzie (przed pętlą kontrolną) wywoływam

pygame.key.set_repeat(1, 2)

aby postać nadal się poruszała, gdy klawisz jest wciśnięty.

Każda pomoc zostanie doceniona! Dzięki :)

questionAnswers(4)

yourAnswerToTheQuestion