Sprite'y, obrazy i zasoby gry
Gotowe obrazy są ładowane na jednej linii — ale ścieżka do nich powinna być liczona od lokalizacji kodu, a nie od miejsca jego uruchomienia.
Kształty rysowane pygame.draw, świetnie do
Ale prawdziwe gry prawie zawsze wykorzystują gotowe obrazy — zasoby.
Są ładowane w jednej linii:
igrok_kartinka = pygame.image.load("assets/igrok.png").convert_alpha()
screen.blit(igrok_kartinka, (x, y))
pygame.image.load() już całkowicie ładuje obraz —
.convert_alpha() po tym, jak technicznie nie jest to konieczne, ale dla
obrazy z przezroczystością, zdecydowanie zaleca się wywołanie go natychmiast po inicjalizacji
ekran: tworzy kopię obrazu w formacie pikselowym optymalnym do ponownego rysowania
na tym ekranie i zapisuje per-pixel alpha (Rozdział 20.17). Bez niego
Obraz z przezroczystością zwykle nadal działa, ale można go wyraźnie wyrenderować
wolniejsze przy częstych połączeniach blit().
blit(). Pygame ma również klasę o tej samej nazwie pygame.sprite.Sprite z grupami pygame.sprite.Group, które mogą aktualizować i sprawdzać kolizje dla wielu obiektów jednocześnie, ale tutaj nie są potrzebne, a wrócimy do nich w rozdziale 21, gdzie zauważalny wzrost liczby obiektów.Skąd gra wie, gdzie są pliki
Ścieżka "assets/igrok.png" — względny: to
liczy się od bieżącego katalogu roboczego procesu (CWD), a nie od lokalizacji samego
pliku z kodem. Dopóki uruchamiasz grę z tego samego folderu, w którym leży kod, różnicy nie widać —
ale warto uruchomić ją z innego miejsca (na przykład przez skrót lub przez
python папка/igra.py z sąsiedniego katalogu), oraz ładowania
Spadki z FileNotFoundError. Niezawodne rozwiązanie – moduł
pathlib (Rozdział 15): buduj ścieżkę od lokalizacji samego pliku za pomocą
Kod, a nie na podstawie miejsca, z którego został wystrzelony.
from pathlib import Path
BASE_DIR = Path(__file__).resolve().parent
igrok_kartinka = pygame.image.load(BASE_DIR / "assets" / "igrok.png").convert_alpha()
Path(__file__). Szczególnie łatwo to przeoczyć przy pakowaniu do pliku wykonywalnego (rozdział 20.29), gdzie katalog roboczy procesu może w ogóle nie zgadzać się z folderem, z którego uruchomiono plik wykonywalny.Organizacja folderu projektu
Dobrze ugruntowaną konwencją jest utrzymywanie kodu i zasobów oddzielnie, grupując zasoby według typu:
moya_igra/
igra.py
assets/
images/
igrok.png
vrag.png
sounds/
prygok.wav