Haki zdarzeń¶
Pygame Zero automatycznie wyłapie i będzie wywoływać zdefiniowane przez Ciebie haki zdarzeń. To podejście oszczędza Ci potrzeby implementowania maszynerii pętli zdarzeń samemu.
Haki pętli gry¶
Typowa pętla gry wygląda mniej więcej tak:
while gra_nie_skończona():
przetwarzaj_wejście()
aktualizuj()
rysuj()
Przetwarzanie wejścia jest trochę bardziej skomplikowane, ale Pygame Zero pozwala Ci
łatwo zdefiniować funkcje update() („aktualizuj”) i draw() („rysuj”)
w swoim module gry.
- draw()¶
Wywoływana przez Pygame Zero kiedy potrzebuje odrysować zawartość okna gry.
draw()nie może przyjmować żadnych argumentów.Pygame Zero próbuje ustalić, kiedy trzeba odrysować ekran gry, żeby uniknąć rysowania jeśli nic się nie zmieniło. W każdym kroku pętli gry ekran zostanie odrysowany w następujących sytuacjach:
Gdy masz zdefiniowaną funkcję
update()(zobacz niżej).Gdy zegar uruchomi jakieś zdarzenie.
Gdy nastąpi zdarzenie wejścia.
Możesz się na to naciąć, jeśli spróbujesz zmienić stan gry albo uruchomić jakąś animację wewnątrz funkcji
draw. Na przykład, ten kod jest błędny: nie ma gwarancji, że kosmita będzie się przesuwał po ekranie:def draw(): alien.left += 1 alien.draw()
Prawidłowy kod używa
update()by zmieniać albo animować obiekty, adrawtylko do rysowania zawartości ekranu:def draw(): alien.draw() def update(): alien.left += 1
- update() albo update(dt)¶
Wywoływane przez Pygame Zero jako krok w logice Twojej gry. Ta funkcja będzie wywoływana w kółko, 60 razy an sekundę.
Są dwa podejścia do pisania funkcji
update.W prostych grach możesz przyjąć, że pomiędzy wywołaniami
updateupływa bardzo krótki czas (ułamek sekundy). Może nawet nie interesować Cię, jaki to jest czas: możesz po prostu przesuwać obiekty o określoną liczbę pikseli co klatkę (albo przyspieszać je w określonym tempie, itd.).Bardziej zaawansowanym podejściem jest bazowanie ruchu i obliczeń fizycznych na odstępie czasu który faktycznie upłynął pomiędzy wywołaniami. To może dać płynniejszą animację, ale obliczenia robią się przez to trudniejsze, i musisz bardziej uważać, by unikać nieprzewidywalnych zachowań gdy odtępy czasu stają się większe.
Aby użyć podejścia opartego na czasie, możesz zmienić funkcję
updatetak by przyjmowała jeden parametr. Jeśli Twoja funkcjaupdateprzyjmuje argument, Pygame Zero przekaże do niej upływ czasu w sekundach. Możesz go użyć w swoich obliczeniach ruchu.
Haki obsługi zdarzeń¶
Podobnie do haków pętli gry, Twój program w Pygame Zero może reagować na zdarzenia wejścia, definiując funkcje o specjalnych nazwach.
Trochę podobnie jak w przypadku update(), Pygame Zero przyjrzy się Twoim funkcjom
obsługi zdarzeń, by dowiedzieć się, jak je wywoływać. Nie muszą więc one przyjmować
argumentów. Na przykład, Pygame Zero bez problemu wywoła każdą z tych wersji funkcji
on_mouse_down:
def on_mouse_down():
print("Kliknięto przcisk myszy")
def on_mouse_down(pos):
print("Kliknięto przycisk myszy w punkcie", pos)
def on_mouse_down(button):
print("Kliknięto przycisk myszy", button)
def on_mouse_down(pos, button):
print("Kliknięto przycisk myszy", button, "w punkcie", pos)
Robi to, sprawdzając nazwy parametrów, dlatego muszą być one nazwane dokładnie tak jak powyżej. Każde zdarzenie ma inny zestaw parametrów którego możesz użyć, zgodnie z poniższym opisem.
- on_mouse_down([pos][, button])¶
Wywoływane po wciśnięciu przycisku myszy.
- Parametry
pos – Zestaw (x, y) wskazujący lokalizację wskaźnika myszy w momencie wciśnięcia przycisku.
button – Jedna z wartości wyliczenia
mouse, wskazująca, który przycisk został wciśnięty.
- on_mouse_up([pos][, button])¶
Wywoływane po puszczeniu przycisku myszy.
- Parametry
pos – Zestaw (x, y) wskazujący lokalizację wskaźnika myszy w momencie puszczenia przycisku.
button – Jedna z wartości wyliczenia
mouse, wskazująca, który przycisk został puszczony.
- on_mouse_move([pos][, rel][, buttons])¶
Wywoływane podczas ruchu myszy.
- Parametry
pos – Zestaw (x, y) wskazujący lokalizację, do której został przesunięty wskaźnik myszy.
rel – Zestaw (delta_x, delta_y) reprezentujący zmianę pozycji wskaźnika myszy.
buttons – Zestaw wartości wyliczenia
mouse, wskazujący przyciski wciśnięte podczas ruchu.
Aby obsłużyć przeciąganie myszą, użyj kodu takiego jak ten:
def on_mouse_move(rel, buttons):
if mouse.LEFT in buttons:
# nastąpiło przeciąganie myszą, zrób coś z `rel`
...
- on_key_down([key][, mod][, unicode])¶
Wywoływane po wciśnięciu klawisza.
- Parametry
key – Liczba oznaczająca wciśnięty klawisz (zob. niżej).
unicode – Tam gdzie to stosowne — znak który został wpisany. Nie wszystkie klawisze dają w rezultacie widoczne znaki — wiele może być znakami kontrolnymi. W przypadku, gdy klawisz nie odpowiada znakowi Unicode, ten parametr będzie pustym napisem.
mod – Mapa bitowa wciśniętych klawiszy modyfikujących.
- on_key_up([key][, mod])¶
Wywoływane po puszczeniu klawisza.
- Parametry
key – Liczba oznaczająca puszczony klawisz (zob. niżej).
mod – Mapa bitowa wciśniętych klawiszy modyfikujących.
- on_music_end()¶
Wywoływane po zakończeniu ścieżki z muzyką.
Zwróć uwagę, że ta funkcja nie będzie wywołana, jeśli muzyka jest ustawiona jako zapętlona.
Przyciski i klawisze¶
Wbudowane obiekty mouse („mysz”) i keys („klawisze”) służą do ustalania,
które przyciski lub klawisze były wciśnięte podczas powyższych zdarzeń.
Zwróć uwagę, że zdarzenia kręcenia kółkiem myszy pojawiają się jako wciśnięcia przycisku
zdefiniowanych niżej stałymi WHEEL_UP („kółko w górę”)
i WHEEL_DOWN („kółko w dół”).
- class mouse¶
Wbudowane wyliczenie przycisków, które można odbierać funkcjami obsługi
on_mouse_*.- LEFT¶
- MIDDLE¶
- RIGHT¶
- WHEEL_UP¶
- WHEEL_DOWN¶
- class keys¶
Wbudowane wyliczenie klawiszy, które można odbierać funkcjami obsługi
on_key_*.- BACKSPACE¶
- TAB¶
- CLEAR¶
- RETURN¶
- PAUSE¶
- ESCAPE¶
- SPACE¶
- EXCLAIM¶
- QUOTEDBL¶
- HASH¶
- DOLLAR¶
- AMPERSAND¶
- QUOTE¶
- LEFTPAREN¶
- RIGHTPAREN¶
- ASTERISK¶
- PLUS¶
- COMMA¶
- MINUS¶
- PERIOD¶
- SLASH¶
- K_0¶
- K_1¶
- K_2¶
- K_3¶
- K_4¶
- K_5¶
- K_6¶
- K_7¶
- K_8¶
- K_9¶
- COLON¶
- SEMICOLON¶
- LESS¶
- EQUALS¶
- GREATER¶
- QUESTION¶
- AT¶
- LEFTBRACKET¶
- BACKSLASH¶
- RIGHTBRACKET¶
- CARET¶
- UNDERSCORE¶
- BACKQUOTE¶
- A¶
- B¶
- C¶
- D¶
- E¶
- F¶
- G¶
- H¶
- I¶
- J¶
- K¶
- L¶
- M¶
- N¶
- O¶
- P¶
- Q¶
- R¶
- S¶
- T¶
- U¶
- V¶
- W¶
- X¶
- Y¶
- Z¶
- DELETE¶
- KP0¶
- KP1¶
- KP2¶
- KP3¶
- KP4¶
- KP5¶
- KP6¶
- KP7¶
- KP8¶
- KP9¶
- KP_PERIOD¶
- KP_DIVIDE¶
- KP_MULTIPLY¶
- KP_MINUS¶
- KP_PLUS¶
- KP_ENTER¶
- KP_EQUALS¶
- UP¶
- DOWN¶
- RIGHT¶
- LEFT¶
- INSERT¶
- HOME¶
- END¶
- PAGEUP¶
- PAGEDOWN¶
- F1¶
- F2¶
- F3¶
- F4¶
- F5¶
- F6¶
- F7¶
- F8¶
- F9¶
- F10¶
- F11¶
- F12¶
- F13¶
- F14¶
- F15¶
- NUMLOCK¶
- CAPSLOCK¶
- SCROLLOCK¶
- RSHIFT¶
- LSHIFT¶
- RCTRL¶
- LCTRL¶
- RALT¶
- LALT¶
- RMETA¶
- LMETA¶
- LSUPER¶
- RSUPER¶
- MODE¶
- HELP¶
- PRINT¶
- SYSREQ¶
- BREAK¶
- MENU¶
- POWER¶
- EURO¶
- LAST¶
Dodatkowo, masz dostęp do zestawu stałych reprezentujących klawisze modyfikujące: