Rozdział 20 · Tworzenie gier z Pygame

Uruchom Pygame- grę w przeglądarce

pygbag — aktywnie wspierane narzędzie społeczności do tworzenia Pygame- gier w WebAssembly, nieoficjalna część pygame-ce.

Rozdział 20.10 już wspomniała: gra internetowa na Pygame trafia do przeglądarki przez WebAssembly. Narzędzie, które w praktyce tworzy ten zespół, nazywa się pygbag jest aktywnie wspieranym projektem społecznościowym, a nie oficjalną częścią pygame-ce.

pygbag.txt
pip install pygbag
pygbag moya_igra/

Polecenie uruchamia lokalny serwer WWW i otwiera grę bezpośrednio w przeglądarce — wygodne do sprawdzenia przed publikacją na stałym hostingu. Zwróć uwagę: argument to folder projektu, a nie osobny plik.

Plik z pętlą gry musi nazywać się main.py
pygbag przeszukuje w folderze projektu wyłącznie dla main.py — ta nazwa jest wbudowana w zespół i nie można jej przemianować. Trudne jest to, że przy innej nazwie (igra.py, game.py) budowa się zakończy pomyślnie i bez żadnego ostrzeżenia, ale w przeglądarce gra po prostu się nie uruchomi: loader będzie szukał main.pytego nie ma w archiwum zbudowanym. Jeśli strona otwiera się po kompilacji, ale pozostaje pusta, pierwszą rzeczą jest sprawdzenie nazwy pliku.
pygbag jest narzędziem społecznościowym, a nie częścią pygame-ce
Tak jak w przypadku mobilnych kompilacji (sekcja 20.13, sekcja 20.31), ważne jest rozumienie granicy odpowiedzialności: pygbag jest rozwijany i utrzymywany osobno od pygame-ce.. Jest aktywnie rozwijany i w praktyce dobrze radzi sobie z typowymi 2D- grami na Pygame, ale przy aktualizacji wersji Pygame należy ponownie sprawdzić kompatybilność z aktualną wersją pygbag, a nie zakładać, że jest gwarantowana na zawsze.

Co działa inaczej w sieci

Wersja przeglądarkowa gry nie działa dokładnie tak jak zwykłe uruchomienie na komputerze stacjonarnym — kod wykonywany jest wewnątrz piaskownicy przeglądarki, z której:

Normalne uruchamianie pulpituZgromadzenie do pygbag
Dostęp do systemu plikówPełneOgraniczone do piaskownicy przeglądarki
Główna Pętlawhile True w twoim kodzieAsynchroniczny, z await asyncio.sleep(0) na każdej klatce
Instalacjawymaga Python i pip installNie jest wymagane – otwórz link i zagraj
WystępyNatywna prędkość CPUMoże różnić się od desktopu – warto mierzyć na docelowym urządzeniu

Główna praktyczna różnica w kodzie — pętla gry musi stać się asynchroniczna (async def main() z await asyncio.sleep(0) na końcu każdej klatki), aby nie blokować wątku przeglądarki: pygbag oczekuje dokładnie taka struktura programu. Ważne jest, aby await tutaj dodane W pobliżu z clock.tick()i nie zastępuje go w przykładach pygbag limit liczby klatek pozostaje niezmienny, a łańcuch znaków await następuje zaraz po tym.

Jak wolniejsza jest budowa przeglądarki niż na komputerze, nie da się powiedzieć z góry: zależy od przeglądarka, urządzenie gracza oraz sama gra. Wydajność powinna być mierzona na podstawie celu i nie ustalać określonego procentu strat z góry.