Jak stworzyć grę 2D z Pythonem i biblioteką zręcznościową

Python jest znakomitym językiem dla osób uczących się programowania i idealnym dla każdego, kto chce „zrobić coś” i nie spędzać kupy czasu na kodzie kotła. Arcade to biblioteka Pythona do tworzenia gier wideo 2D, która jest łatwa w użyciu i bardzo przydatna w miarę zdobywania doświadczenia. W tym artykule wyjaśnię, jak zacząć używać Pythona i Arcade do programowania gier wideo.

zacząłem pracę nad Arcade po tym, jak uczyłem studentów korzystania z biblioteki PyGame., Przez prawie 10 lat uczyłem osobiście przy użyciu PyGame i opracowałem ProgramArcadeGames.com uczyć przez Internet. PyGame jest świetny, ale w końcu poczułem, że tracę czas na krycie błędów, które nigdy nie zostały naprawione.

martwiłem się o nauczanie takich rzeczy jak pętla zdarzeń, która nie była już sposobem kodowania. Miałem całą sekcję, w której wyjaśniłem, dlaczego współrzędne y zostały odwrócone. Ponieważ PyGame był rzadko aktualizowany i jest oparty na starej bibliotece SDL 1, a nie na czymś bardziej nowoczesnym, takim jak OpenGL, nie miałem wiele nadziei na przyszłość.,

chciałem biblioteki, która była łatwiejsza w użyciu, bardziej wydajna i używała niektórych nowych funkcji Pythona 3, takich jak dekoratory i hinting typu. Arcade to jest to. A oto jak zacząć.

instalacja

Arcade, podobnie jak wiele innych pakietów, jest dostępna za pośrednictwem PyPi, co oznacza, że możesz zainstalować Arcade używając poleceniapip (lub polecenia pipenv)., Jeśli masz już zainstalowany Python, możesz po prostu otworzyć wiersz polecenia w systemie Windows i wpisać:

pip install arcade

lub w systemie MacOS i Linux wpisz:

pip3 install arcade

aby uzyskać bardziej szczegółowe instrukcje instalacji, możesz zapoznać się z dokumentacją instalacji Arcade.

prosty rysunek

możesz otworzyć okno i tworzyć proste rysunki za pomocą zaledwie kilku linii kodu. Stwórzmy przykład, który rysuje uśmiechniętą buźkę, jak na poniższym rysunku:

poniższy skrypt pokazuje, w jaki sposób możesz użyć poleceń rysowania Arcade., Zauważ, że nie musisz wiedzieć, jak używać klas ani nawet definiować funkcji. Programowanie z szybką wizualną informacją zwrotną jest Świetne dla każdego, kto chce rozpocząć naukę programowania.

Używanie funkcji

oczywiście pisanie kodu w kontekście globalnym nie jest dobrą formą. Na szczęście ulepszenie programu za pomocą funkcji jest łatwe. Tutaj możemy zobaczyć przykład rysowania drzewa sosnowego w określonym (x, y) miejscu przy użyciu funkcji:

Pełny przykład można znaleźć w rysowaniu z funkcjami.,

bardziej doświadczony programista będzie wiedział, że nowoczesne programy graficzne najpierw ładują informacje rysunkowe na kartę graficzną, a następnie proszą kartę graficzną, aby narysowała je później jako partię. Arcade również to wspiera. Rysowanie 10 000 prostokątów pojedynczo zajmuje około 0,800 sekund. Rysowanie ich jako partii zajmuje mniej niż 0,001 sekundy.

Klasa okna

większe programy zazwyczaj wywodzą się z klasy okna lub używają dekoratorów. Pozwala to programiście pisać kod do obsługi rysowania, aktualizacji i obsługi danych wejściowych od użytkownika., Poniżej znajduje się szablon dla programu bazującego na Window.

KlasaWindow ma kilka metod, które Twoje programy mogą nadpisać, aby zapewnić funkcjonalność programu. Oto niektóre z najczęściej używanych:

  • on_draw: cały kod do narysowania ekranu znajduje się tutaj.
  • update: cały kod do przenoszenia przedmiotów i wykonywania logiki gry znajduje się tutaj. Jest to wywoływane około 60 razy na sekundę.,
  • on_key_press: obsługuje zdarzenia po naciśnięciu klawisza, takie jak nadanie graczowi prędkości.
  • on_key_release: uchwyt po zwolnieniu klucza, tutaj możesz zatrzymać odtwarzacza przed poruszaniem się.
  • on_mouse_motion: jest to wywoływane za każdym razem, gdy porusza się mysz.
  • on_mouse_press: wywoływane po naciśnięciu przycisku myszy.
  • set_viewport: ta funkcja jest używana w grach przewijania, gdy masz świat znacznie większy niż to, co można zobaczyć na jednym ekranie., Wywołanie set_viewport pozwala programiście ustawić, która część świata jest aktualnie widoczna.

sprite 'y

sprite' y to prosty sposób na stworzenie obiektu bitmapowego 2D w Arcade. Arcade ma metody, które ułatwiają rysowanie, przenoszenie i animowanie sprite ' ów. Możesz również łatwo używać sprite ' ów do wykrywania kolizji między obiektami.

Tworzenie sprite 'a

Tworzenie instancji klasy Sprite 'a Arcade' A Z Grafiki jest łatwe. Programista potrzebuje tylko nazwy pliku obrazu, aby oprzeć sprite off, i opcjonalnie numer, aby przeskalować obraz w górę lub w dół., Na przykład:

SPRITE_SCALING_COIN = 0.2
coin = arcade.Sprite("coin_01.png", SPRITE_SCALING_COIN)

Ten kod utworzy sprite używając obrazu przechowywanego w coin_01.png. Obraz zostanie zmniejszony do 20% pierwotnej wysokości i szerokości.

listy Sprite 'ów

sprite' y są zwykle zorganizowane w listy. Listy te ułatwiają zarządzanie spritami. Sprity na liście będą używać OpenGL do wsadowego rysowania spritów jako grupy. Poniższy kod ustawia grę z graczem i kilka monet do zebrania przez gracza. Używamy dwóch list, jednej dla gracza i jednej dla monet.,

możemy łatwo narysować wszystkie monety na listach monet:

def on_draw(self):
""" Draw everything """
arcade.start_render()
self.coin_list.draw()
self.player_list.draw()

Wykrywanie kolizji sprite ' ów

funkcjacheck_for_collision_with_list pozwala nam sprawdzić, czy sprite 'y trafiają do innego sprite' a na liście. Możemy użyć tego, aby zobaczyć wszystkie monety, z którymi sprite gracza ma kontakt. Korzystając z prostej pętli for, możemy pozbyć się monety z gry i zwiększyć nasz wynik.

Pełny przykład znajduje się w collect_coins.py.

fizyka gry

wiele gier zawiera pewien rodzaj fizyki., Najprostsze są odgórne programy, które uniemożliwiają graczowi przechodzenie przez ściany. Platformówki zwiększają złożoność dzięki grawitacji i poruszającym się platformom. Niektóre gry używają pełnego silnika fizyki 2D z masą, tarciem, sprężynami i innymi.

gry odgórne

w przypadku prostych gier opartych na odgórnych, program zręcznościowy potrzebuje listy ścian, przez które gracz (lub cokolwiek innego) nie może się poruszać. Zwykle nazywam to wall_list., Następnie silnik fizyki jest tworzony w Window kod konfiguracji klasy z:

self.physics_engine = arcade.PhysicsEngineSimple(self.player_sprite, self.wall_list)

player_sprite otrzymuje wektor ruchu z dwoma atrybutami change_x I change_y. Prostym przykładem może być ruch gracza za pomocą klawiatury. Na przykład, może to być w niestandardowym potomku klasy Window:

chociaż ten kod ustawia prędkość odtwarzacza, nie porusza odtwarzacza., Wupdate metodaWindow wywołaniephysics_engine.update() spowoduje przeniesienie odtwarzacza, ale nie przez ściany.

def update(self, delta_time):
""" Movement and game logic """
self.physics_engine.update()

pełny przykład zobacz sprite_move_walls.py.

platformówki

przejście do platformówki z widokiem z boku jest dość łatwe. Programista musi tylko przełączyć silnik fizyki na PhysicsEnginePlatformer I dodać stałą grawitacji.

self.physics_engine = arcade.PhysicsEnginePlatformer(self.player_sprite,
self.wall_list,
gravity_constant=GRAVITY)

Możesz użyć programu Tiled do układania płytek / bloków, które tworzą twój poziom.

przykład można znaleźć w sprite_tiled_map.,py.

dla pełnej fizyki 2D można zintegrować bibliotekę PyMunk.

Ucz się na przykładzie

jednym z najlepszych sposobów nauki jest przykład. Biblioteka Arcade posiada długą listę przykładowych programów, które można wykorzystać do tworzenia gier. Każdy z tych przykładów pokazuje koncepcję gry, o którą uczniowie pytali w moich klasach lub online na przestrzeni lat.

uruchamianie dowolnego z tych demek jest łatwe po zainstalowaniu Arcade., Każdy z próbek ma komentarz na początku programu z poleceniem, które można wpisać w wierszu poleceń, aby uruchomić próbkę, na przykład:

python -m arcade.examples.sprite_moving_platforms

podsumowanie

Arcade pozwala rozpocząć programowanie grafiki i gier z łatwym do zrozumienia kodem. Wielu nowych programistów stworzyło świetne gry niedługo po rozpoczęciu pracy. Spróbuj!

aby dowiedzieć się więcej, Weź udział w wykładzie Paula Vincenta Cravena, łatwe tworzenie gier 2D z Arcade, na PyCon Cleveland 2018.

Share

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *