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)
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