Rozdział 20 · Tworzenie gier z Pygame

Jak debugować gry

Kompendium według objawu: większość błędów Pygame-projektów nie powoduje wyjątek — gra po prostu zachowuje się nie tak, jak oczekiwano.

W trakcie rozdziału natknąłeś się już na ponad tuzin typowych błędów Pygame-projects. jeden lub dwa dla każdego nowego tematu. Tutaj są zebrane w jednej tabeli – jako książka referencyjna, co jest wygodne do powrotu, gdy coś w swoim projekcie zachowuje się niewytłumaczalnie.

ObjawZwykła przyczynaGdzie dowiedzieć się więcej
Okno oznaczone jako „Nie odpowiada”pygame.event.get() nie jest nazywana w każdej klatce20.14
Pygame moduły od początku nie działają prawidłowoZapomniane pygame.init()20.14
Procesor obciążony w 100% bez powoduZapomniano clock.tick(FPS)20.15
Postać teleportuje się na cały ekrandt nie przelicza się z milisekund na sekundy20.16
Ukośnie szybciej niż prostaWektor prędkości nie jest znormalizowany20.16
„Ślady”Zapomniane screen.fill() na początku kadłu20.17
Okno pokazuje tylko ekranZapomniano pygame.display.flip()20.17
Przezroczystość obrazu zniknęłaPrzywołany przez . convert() zamiast . convert_alpha(), czyli Surface stworzony bez pygame.SRCALPHA20.17
FileNotFoundError na cudzym komputerzeDroga do aktywa nie jest budowana przez pathlib20.19
Postać drga zamiast płynnieKEYDOWN stosowane do działania ciągłego20.20
Seria ognia z broni wybucha jednym stuknięciemget_pressed() używane do jednorazowej akcji20.20
Zderzenia wydają się niesprawiedliweHitbox nie jest zredukowany z obrazu20.21
Animacja wizualnie opóźnia się o jedną klatkęAktualizacja klatki animacji następuje po rysowaniu20.23
Zauważalne spowolnienia przy każdym dźwiękuSound() jest odtwarzana w każdej klatce, a nie raz20.24
Gra „teleportuje się” po zdjęciu pauzyPauza jest sprawdzana tylko w render(), nie w update()20.26

Ogólna metoda debugowania gier

Prawie wszystkie robaki z tej tabeli mają jedną wspólną cechę: nie porzucają wyjątek i nie porzucają Pokazuj tradycyjny komunikat o błędzie – gra po prostu nie działa zgodnie z oczekiwaniami. Dla tej klasy błędów szczególnie przydatne są następujące elementy:

otladka_pechatyu.py
#Temporary print() najszybszy sposób, by zobaczyć rzeczywiste wartości
print(f"dt={{dt:.4f}} x={{x:.1f}} skorost_x={{skorost_x:.1f}}")

# Tymczasowo renderuj hitbox na szczycie sprite'a — zobacz jego granice oczami
pygame.draw.rect(screen, (255, 0, 0), hitbox, width=2)
Debugowanie rysowania — nie zapomnij usunąć
Tymczasowe pygame.draw.rect(..., width=2) hitboxa to jeden z najskuteczniejszych trików debugowania kolizji, ale łatwo o nim zapomnieć w gotowym projekcie. Przydatnym nawykiem jest trzymanie takich insertów pod jednym wspólnym flagiem, jak OTLADKA = Falsewłączać i wyłączać je jednocześnie, zamiast przeglądać cały plik.
Praktyka: diagnoza na podstawie objawu
Zeskanowanie bezpośrednio w przeglądarce – nie wymaga instalacji Pygame
Otwórz praktykę →