Rozdział 21 · Projekt: kosmiczny strzelec

Pętla rozgrywki i statek gracza

Plan tego, co powinno dziać się na każdej klatce — i pierwszy bohater gry.

Pętla rozgrywki

Podobnie jak w rozdziale 20, pętla jest sercem gry. Tym razem odświeża się jednocześnie na każdej klatce kilka rzeczy: pozycja statku, wrogowie, pociski – oraz sprawdzanie kolizji między nimi. S Z pierwszego kadłu liczenie cyklu delta time (w skrócie dt) — sekcja 20.16 już wyjaśniła, Po co: Prędkość określana w pikselach na sekundę i stosowana w dt jest niezależna od częstotliwości Klatki konkretnego komputera:

igrovoj_cikl_plan.py
while rabotaet:
    dt = clock.tick(FPS) / 1000.0   # sekund od ostatniej klatki

    # 1. obsłużyć zdarzenia (wyjście, pauza, strzał po naciśnięciu)
    #2. Przetwarzaj zaciskane klucze (ruch statku, utrzymanie ognia)
    #3. Aktualizuj pozycje wrogów i pocisków o dt, sprawdź kolizje
    # 4. narysować wszystko od nowa
dt tu od początku, nie dodaje się później
Mini-projekt z piłką odbijającą się (Rozdział 20.5) zaczął się od ruchu pikseli na klatkę i przeszedł do delta time dopiero w Sekcji 20.16. Nie zrobimy tego tutaj: ponieważ rozdział 20 już wyjaśnił, dlaczego ruch pikseli na klatkę zależy od czyjegoś sprzętu, space shooter oblicza prędkość w pikselach na sekundę (px/s) od pierwszego ruchomego obiektu i stosuje ją przez dt.

Tworzenie statku kosmicznego

Zamiast oddzielnych zmiennych x, y statku wygodnie jest używać pygame.Rect — od razu przechowuje pozycję i rozmiar razem i będzie potrzebny do sprawdzania kolizji:

korabl.py
KORABL_SHIRINA, KORABL_VYSOTA = 44, 44

korabl = pygame.Rect(
    SHIRINA // 2 - KORABL_SHIRINA // 2,
    VYSOTA - KORABL_VYSOTA - 20,
    KORABL_SHIRINA,
    KORABL_VYSOTA,
)

# w pętli gry:
pygame.draw.rect(screen, (80, 220, 120), korabl)
Real Window: Zbliżenie niebieskiego trójkątnego statku z pomarańczowym blaskiem silnika poniżej
Ostateczna wersja rysuje statek z własnym sprite'em (sekcja 21.10) zamiast prostokąta, ale Rect pozostaje jego hitboxem.
Rect przechowuje cztery liczby — oraz wiele użytecznych właściwości
Rect(x, y, ширина, высота) dodatkowo oblicza .centerx, .bottom, .top inne wygodne współrzędne — przydadzą się w następnej części.
Praktyka: Rect i pierwszy statek
Pygame otwiera natywne okno Python – uruchomione lokalnie w VS Code, PyCharm lub Jupyter
Praktyka kursuje lokalnie
Otwórz praktykę →