Artykuł na temat biblioteki "pygame" w języku Python! Wyjaśnię w nim jak wygląda rysowanie figur geometrycznych w "pygame", gdyż może sprawiać problemy ze względu na nieintuicyjne działanie 🧠. Tutaj to funkcjonuje inaczej, niż w silnikach gry, dlatego trzeba rozumieć jak to ze sobą współgra. Pokażę Ci też kilka przykładowych metod do rysowania podstawowych figur geometrycznych oraz dlaczego odświeżanie ekranu jest rzeczą, o której nie można zapomnieć ⚠️! Jeżeli nie wiesz na czym polega biblioteka "pygame", przeczytaj artykuł wprowadzający do tematu 👈.
JAK ODBYWA SIĘ RYSOWANIE FIGUR GEOMETRYCZNYCH W "PYGAME"?
Materiał podzieliłem na 3 następujące części:
- przedstawienie działania systemu współrzędnych w "pygame",
- przedstawienie kilku metod do rysowania kilku figur geometrycznych (nie będzie o importowaniu plików graficznych - ten temat jest w osobnym artykule),
- wyjaśnienie znaczenia odświeżania ekranu.
Wszystkie podpunkty stanowią podstawę do pełnego zrozumienia tematu rysowania po ekranie w "pygame". Jeżeli dopiero się uczysz, nie wolno Ci pominąć żadnego z etapów 📖!
1. UKŁAD WSPÓŁRZĘDNYCH
Zanim przejdziemy do samego rysowania, musisz wiedzieć jak w "pygame" działa układ współrzędnych 📐. Każde narzędzie do tworzenia gier określa w różny sposób ustawianie współrzędnych wszystkich obiektów od tzw. punktu początkowego (ang. origin). Na przykład w silniku "Unity", za wysokość odpowiada oś Y, lecz w programie "Blender" (do modelowania 3D), to już oś Z reprezentuje wysokość (tak samo jest w "Unreal Engine"). Dlatego zwracam na to uwagę 💣.
W "pygame", "liczenie" współrzędnych zawsze zaczyna się od lewego górnego rogu ℹ️. Także idąc według osi X, kierujemy się w prawo, a według osi Y, idziemy w dół 👍.
![]() |
W "pygame", punkt początkowy (ang. origin) znajduje się w lewym górnym rogu. W osi odciętych (X), poruszamy się w prawo, a w osi rzędnych (Y), poruszamy się w dół.
2. PRZYKŁADOWE METODY DO RYSOWANIA FIGUR GEOMETRYCZNYCH
Teraz popatrzmy na parę metod, które pozwalają na rysowanie figur geometrycznych w "pygame" 🎨. Wszystkie metody, o jakich wspominam, pochodzą z modułu "draw". To nie są wszystkie jakie występują w "pygame" - resztę możesz znaleźć w oficjalnej dokumentacji.
Metody wykonujące cokolwiek, co ma związek z grą, najlepiej umieszczać po sprawdzeniu instrukcją warunkową, że jest sens dalej wykonywać pętlę gry 🔁. Pokażę w kodzie źródłowym 👇:
import pygame
window = pygame.display.set_mode([320, 240])
is_running = True
while is_running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
is_running = False
# instrukcje dot. rysowania w oknie gry
pygame.display.update()
pygame.quit()W miejscu, w którym dałem komentarz ✅. Dobrą praktyką jest też zdefiniowanie sobie metod dzieląc na:
- obsługę sterowania 🎮,
- aktualizację 🔁,
- rysowanie 🎨.
i wstawienie wywołań w tej samej kolejności tam, gdzie jest komentarz, natomiast tutaj skupiamy się na zupełnie innym temacie 😉. Koniecznie umieść wywołanie metody "update", zaraz po metodach rysujących - szczegóły zostawiam w ostatniej części materiału 📰!
rect
"rect" to jest rysowanie prostokąta. Metoda oczekuje 3 parametrów:
- zmienną przechowującą okno gry,
- listę z trzema liczbami całkowitymi oznaczającymi wartości zgodne z paletą barw RGB (czerwony, zielony, niebieski) w zakresie <0-255>,
- instancję obiektu typu "pygame.Rect" przyjmującą za parametry kolejno: pozycję w osi X, pozycję w osi Y, szerokość oraz wysokość.
Tak wygląda prosty przykład 👇:
pygame.draw.rect(window, [200, 150, 100], pygame.Rect(16, 16, 48, 72))Oto efekt końcowy:
![]() |
Przykładowy efekt wywołania metody "pygame.draw.rect".
circle
Rysowanie koła odbywa się poprzez metod o nazwie "circle". Przyjmuje ona 4 parametry:
- zmienną referencyjną okna gry,
- listę trzech tych samych wartości RGB,
- listę dwóch wartości dla określenia pozycji środka koła w przestrzeni 2D (x, y),
- średnicę w pikselach jakie to koło ma przyjmować.
Oto przykład wywołania 👇:
pygame.draw.circle(window, [30, 100, 60], [48, 48], 32)Uzyskujemy takie kółko 😄:
![]() |
Przykładowy efekt wywołania metody "pygame.draw.circle".
polygon
Trzecią z prezentowanych metod jest "polygon" przeznaczoną do rysowania wielokątów. Czyli możemy nie tylko nanosić na ekran trójkąty, lecz również sześciokąty, ośmiokąty, osiemnastokąty itd. 🌟!!! Wbrew pozorom, korzystanie z niej wcale nie jest skomplikowane (trzeba tylko uważać na nawiasy 🙂)!
"polygon" składa się z 3 następujących parametrów:
- zmienna przechowująca nasze okienko z grą,
- ta sama lista wartości RGB,
- lista list zawierających po 2 wartości dla ustalenia pozycji w przestrzeni 2D każdego z podanych wierzchołków (powtarzam - lista list 🤯!).
Proszę bardzo, przykład 👇:
pygame.draw.polygon(window, [128, 255, 75], [[16, 16], [25, 44], [102, 73]])i to nam da taki trójkącik 🙂:
![]() |
Przykładowy efekt wywołania metody "pygame.draw.polygon".
Można dostać oczopląsu od tego ostatniego parametru 😅, natomiast jak nabierzesz wprawy, to będziesz tak pisać automatycznie ⏩.
Jeszcze jedna rzecz dotycząca wszystkiego, co jest rysowane. Możesz bez problemu "nakładać" jeden element na drugi i wtedy "schowany" będzie ten, którego wywołanie odbyło się wcześniej od drugiego. W takich narzędziach, jak "pygame", kolejność wywołań poszczególnych elementów działa jak warstwy "idące w stronę kamery". Innymi słowy, na wierzchu będzie ten element, który będzie rysowany najpóźniej ℹ️.
3. ODŚWIEŻANIE EKRANU
Ostatnia ważna część - odświeżanie. "pygame" działa dość nietypowo w odróżnieniu od potężniejszych narzędzi, w których po prostu kładzie się obiekt na scenie i "z dyńki" 😁. Dlatego na samym wstępie zaznaczyłem, żebyś dorzucił(a) metodę "update", ponieważ bez niej...nie zobaczysz niczego na ekranie 🔥!!!
Aby prawidłowo zaprogramować rysowanie figur geometrycznych, musisz jeszcze wstawić wywołanie metody odpowiedzialnej za aktualizowanie (odświeżanie) ekranu 🧹. To działa tak, gdybyś przeniósł/przeniosła do innego katalogu jakiś plik i ujrzał(a) go tam dopiero po naciśnięciu przycisku "Odśwież" z menu kontekstowego, a nie automatycznie ℹ️.
Masz do tego dwie metody 👇:
- "update" (odświeżanie całego ekranu bądź tylko pewnego fragmentu - tylko jak się wprowadzi wartość typu "pygame.Rect" do parametru albo listę takich instancji),
- "flip" (odświeżanie całego ekranu).
Obie znajdują się w module "display". NIGDY nie wstawiaj obu naraz! Wybieraj tylko jedną z dwóch zależnie od okoliczności!
W ten sposób dotarliśmy do końca i wyjaśniłem Ci jak wygląda rysowanie figur geometrycznych w "pygame" 😊!



