Rozdział 21 · Projekt: kosmiczny strzelec

Strzelanie: Tworzenie i przesuwanie pocisków

Spacja tworzy kulę na dziobie statku – leci w górę, aż opuści ekran.

Pociski - słownik Rect i współrzędna ułamkowa Y występuje w dziób statku, gdy naciska się spację, wznosi się z prędkością w pikselach na sekundę:

strelba.py
PULYA_SHIRINA, PULYA_VYSOTA = 6, 18
PULYA_SKOROST = 560.0   # px/s

puli = []

def vystrelit():
    pulya_rect = pygame.Rect(
        korabl.centerx - PULYA_SHIRINA // 2,
        korabl.top,
        PULYA_SHIRINA,
        PULYA_VYSOTA,
    )
    puli.append({{"rect": pulya_rect, "y": float(pulya_rect.y)}})

# w obsłudze zdarzeń:
if event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
    vystrelit()

# w aktualizacji ramek:
for pulya in puli:
    pulya["y"] -= PULYA_SKOROST * dt
    pulya["rect"].y = round(pulya["y"])
puli = [p for p in puli if p["rect"].bottom > 0]   # usuwamy te, które wyleciały poza ekran
Rzeczywiste okno: mała żółta kula wystrzeliwuje z nosa niebieskiego statku do góry
Rzeczywiste okno — pocisk pojawia się dokładnie przy nosie statku i leci do góry.
Lista przez generator list — czyszczenie „śmieci”
[p for p in puli if p["rect"].bottom > 0] (generator list z rozdziału 11) pozostawia tylko te pociski, które są widoczne na ekranie – bez tej linii lista pociski rosłyby w nieskończoność, co coraz bardziej spowalniałby grę.
KEYDOWN — jedno zdarzenie na jedno naciśnięcie
Wydarzenie pygame.KEYDOWN następuje raz w momencie fizycznego naciśnięcia klawisza. Automatyczne powtarzanie klawisza w Pygame jest domyślnie wyłączone (można go włączyć tylko wyraźnie, przez pygame.key.set_repeat(...)i nie mamy) oznacza, że trzymanie luki nie generuje nowej KEYDOWN na każdej klatce. Tutaj daje dokładnie jeden strzał jednym kliknięciem: wygodne do pojedynczego strzału, ale nieodpowiednie do trzymania ognia – zostanie to omówione w sekcji 21.13.
Praktyka: Strzelanie i ruch pocisków
Pygame otwiera natywne okno Python – uruchomione lokalnie w VS Code, PyCharm lub Jupyter
Praktyka kursuje lokalnie
Otwórz praktykę →