Rozdział 20 · Tworzenie gier z Pygame

Gry mobilne: sterowanie dotykowe i wirtualne

Na urządzeniu mobilnym podstawowy sposób wprowadzania — ekran dotykowy, i to zmienia zasady sterowania grą.

Gry mobilne docierają do ogromnej publiczności, a telefony i tablety mają inne podejście Główną metodą wprowadzania jest wbudowany ekran dotykowy zamiast klawiatury i myszy. Zewnętrzne Klawiatura, mysz lub gamepad również mogą być podłączone do telefonu lub tabletu, ale Nie powinieneś polegać na nich jako na głównej metodzie sterowania — gra powinna być w pełni Pracuj tylko na ekranie dotykowym. Zacznijmy od tego, jak to działa.

Ekran dotykowy i multitouch

Dotknięcie ekranu informuje grę w podobny sposób jak Pygame raporty kluczowe, zdarzenie z współrzędnymi. Kluczowa różnica polega na tym, że ekran może natychmiast kilka jednoczesne punkty dotyku (multitouch) — na przykład jeden palec przesuwa postać, a drugi w tym samym czasie naciska przycisk strzału. W desktopowym Pygame zdarzenie myszy zawsze ma jeden punkt i jeden przycisk; w tworzeniu aplikacji mobilnych trzeba od samego początku projektować pod kilka niezależnych punktów dotyku jednocześnie.

Wirtualne sterowanie

Bez fizycznej klawiatury przyciski ruchu, skoku i strzału muszą być rysowane bezpośrednio na ekran — wirtualny joystick, wirtualne przyciski. To nie jest drobiazg, lecz osobna część Projekt gry: Wirtualne sterowanie powinno być na tyle duże, by pomieścić palec (palec jest znacznie bardziej niedokładny niż wskaźnik myszy), nie nakładają się na ważną część ekranu i pozostają Responsywny nawet przy szybkich ruchach.

Real Window: Okrągły wirtualny joystick po lewej i dwa okrągłe wirtualne przyciski po prawej na ciemnym tle
Rzeczywiste okno: makieta wirtualnych elementów sterujących, narysowana zwykłymi pygame.draw.circle() — duże strefy pod palec, a nie pod kursor myszy.
Klawiatura + mysz (komputer stacjonarny)Ekran dotykowy (telefon komórkowy)
Dokładność wskazańWysoka — piksel pod kursoremPoniżej — palec szerszy niż kursor
Liczba jednoczesnych wejśćOgraniczenie do liczby kluczyWielokrotne niezależne dotyki (multi-touch)
Sprzężenie zwrotne dotykoweFizyczne naciśnięcie klawisza po naciśnięciuEkran jest płaski, ale urządzenie może reagować wibracjami oprogramowania
Miejsce na ekranieNie zajmuje pola gryWirtualne przyciski nakładają się na część ekranu

Akcja w grze jako abstrakcja

Aby ta sama logika gry działała na klawiaturze, padzie i ekranie dotykowym, Warto je oddzielić akcja w grze ("przesuń się w prawo", "skocz") z konkretnego fizyczne wejście, które go wywołuje. Wtedy "skok" może oznaczać naciśnięcie spacji na Na komputerze stacjonarnym, A przycisk na padzie lub stuknięcie wirtualnego przycisku na telefonie — oraz kod do gry, która reaguje na "skok", w ogóle się nie zmienia:

input_action.py
# Schematycznie: to samo wywołanie nie zależy od źródła wejściowego
def obrabotat_dejstviya(igra):
    if igra.dejstvie_nazhato("prygok"):
        igrok.prygnut()

# dejstvie_nazhato() wewnątrz sprawdza albo klawisz, albo gamepad,
# albo trafienie tapem w obszar wirtualnego przycisku — gracz tego nie widzi
Abstrakcji danych wejściowych – nie tylko na urządzeniach mobilnych
To rozdzielenie jest przydatne nawet w czysto desktopowych grach: pozwala później dodać wsparcie dla gamepada lub konfigurowalne klawisze bez konieczności przepisywania logiki gry. Architektura klas Game w sekcji 20.26 dokładnie od samego początku określa ten podział.