Rozdział 20 · Tworzenie gier z Pygame

Obsługa wejścia: zdarzenia i przytrzymanie klawiszy

Jednorazowa akcja — zdarzenie. Ciągła akcja — sprawdzanie stanu. Pomieszanie ich — częste źródło błędów w zarządzaniu.

W sekcji 20.4 widziałeś już oba sposoby testowania klawiatury. A dokładniej, o Do jakiego rodzaju działania każdy z nich się nadaje i co się dzieje, jeśli się pomylą.

Wydarzenia czy status?
Akcja następuje raz na każde stuknięcie (skok, pauza, strzał)
pygame.event.get() + KEYDOWN
Akcja trwa przez cały czas trwania klawisza (bieg w lewo/prawo)
pygame.key.get_pressed()
KEYDOWN ciągłego ruchu – postać drga
Wydarzenie KEYDOWN uruchamia się raz w momencie naciśnięcia, a nie podczas trzymania klawisza. Jeśli powiązasz z nim ruch postaci, porusza się dokładnie o jeden krok na naciśnięcie i zawiesza się, nawet jeśli gracz nadal trzyma klawisz – aby poruszać się nieprzerwanie, musisz to zrobić pygame.key.get_pressed(), sprawdzany w każdej klatce.
get_pressed() jednorazowej akcji – broń strzela seriami
Błąd wsteczny: jeśli sprawdzisz klavishi[pygame.K_SPACE] każdy kadr i strzelać przy każdym prawdziwym wartości, przy 60 FPS jedno przytrzymanie spacji na sekundę spowoduje około 60 strzałów — klawisz pozostaje wciśnięty cały czas. Dla jednorazowego działania przy wciśnięciu potrzebne jest właśnie zdarzenie KEYDOWNzamiast sprawdzać obecny stan.

Mysz także jest podwójna

Mouse ma ten sam wybór: zdarzenie pygame.MOUSEBUTTONDOWN — dla pojedynczego kliknięcia, a pygame.mouse.get_pressed() — dla weryfikacji, Czy przycisk jest teraz przytrzymywany (przydatne na przykład do rysowania linii podczas trzymania przycisku myszy jest trzymane). Aktualne współrzędne kursora są dostępne w dowolnym momencie za pomocą pygame.mouse.get_pos().

Bridge do gamepada i ekranu dotykowego

Abstrakcja akcji gry z sekcji 20.11 ("prygok" zamiast konkretnego klucza) opłaca się szczególnie tutaj: pod nim mogą równie dobrze ukryć i KEYDOWN z odstępem, oraz przycisk padapygame.JOYBUTTONDOWN), i stuknąć w wirtualny przycisk na Ekran dotykowy — Kod gry nie zmienia się ani o jedną linię.

Praktyka: Wydarzenia i status klawiatury
Pygame otwiera natywne okno Python – uruchomione lokalnie w VS Code, PyCharm lub Jupyter
Praktyka kursuje lokalnie
Otwórz praktykę →