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 :)