Pygame: zdarzenia KEYDOWN, KEYUP i funkcje get_pressed(), get_mods().
Zdarzenia KEYDOWN
, KEYUP
to pojedyńcze sygnały, które pojawiają się
na początku i na końcu trzymania wciśniętego klawisza.
Funkcja pygame.key.get_pressed()
dostarcza przez cały czas informację,
że dany klawisz jest trzymany wciśnięty. Wykorzystuje do tego tablicę
z wartościami True/False. Ta funkcja wymaga wywoływania (w pętli) funkcji pygame.event.get()
lub pygame.event.pump()
bo tylko wtedy może zakutalizować informacje dzięki zdarzeniom KEYDOWN
i KEYUP
.
Nie sposób z niej wyczytać w jakiej kolejności zostały wciśnięte kombinacje klawiszy. Niektóre klawiatury mogą powodować, że tylko pewna ilość wciśniętych klawiszy jest pamiętana - np. tylko dwa ostatnio wciśnięte klawisze - co powoduje, że nie sposób wychwycić wciśnięcie kombinacji kilku klawiszy.
Zdarzenia KEYDOWN
, KEYUP
:
esc_pressed = False
while True:
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
print("Właśnie wciśnięto ESC")
esc_pressed = True
elif event.type == pygame.KEYUP:
if event.key == pygame.K_ESCAPE:
print("Właśnie puszczono ESC")
esc_pressed = False
if esc_pressed:
print("ESC cały czas wciśnięty")
#---
keys = pygame.key.get_pressed()
if keys[pygame.K_ESCAPE]:
print("ESC cały czas wciśnięty")
Funkcja get_pressed()
:
while True:
pygame.event.pump()
# lub: pygame.event.get()
keys = pygame.key.get_pressed()
if keys[pygame.K_ESCAPE]:
print("ESC cały czas wciśnięty")
[OT] Sprawdzanie klawiszy specjalnych
Przy sprawdzaniu klawiszy specjalnych wykorzystuje się
binarne operacje &
(AND
), |
(OR
) i inne.
pygame.event.pump()
mods = pygame.key.get_mods()
if mods & pygame.KMOD_SHIFT:
print('SHIFT cały czas wciśnięty')
if mods & pygame.KMOD_LSHIFT: # L
print('lewy SHIFT cały czas wciśnięty')
if mods & pygame.KMOD_RSHIFT: # R
print('prawy SHIFT cały czas wciśnięty')
if mods & (pygame.KMOD_SHIFT | pygame.KMOD_CTRL):
print('SHIFT+CTRL cały czas wciśnięte')
- KMOD_NONE
- KMOD_LSHIFT, KMOD_RSHIFT, KMOD_SHIFT
- KMOD_CAPS
- KMOD_LCTRL, KMOD_RCTRL, KMOD_CTRL
- KMOD_LALT, KMOD_RALT, KMOD_ALT
- KMOD_LMETA, KMOD_RMETA, KMOD_META
- KMOD_NUM
- KMOD_MODE
Powyższe wymagają przedrostka pygame.
(co preferuje) lub wymaga importu from pygame.locals import *
(czego nie preferuje)
Źródło: Pygame documentation - key (dokumentacja wraz z komentarzami)
Buy a Coffee