Jak vytvořit 2D hry s Python a Pasáže knihovny

Python je vynikající jazyk pro lidi, naučit se programovat, a ideální pro každého, kdo chce „něco dělat“, a ne trávit spoustu času na často používaný kód. Arcade je Python Knihovna pro vytváření 2D videoher, které je snadné začít používat, a velmi schopný, jak si získat zkušenosti. V tomto článku vysvětlím, jak začít používat Python a Arcade k programování videoher.

začal jsem se vyvíjet na Arcade poté, co jsem učil studenty pomocí knihovny PyGame., Učil jsem osobně pomocí PyGame téměř 10 let, a vyvinul jsem se ProgramArcadeGames.com učit on-line. PyGame je skvělá, ale nakonec jsem se cítil, jako bych ztrácel čas tím, že jsem musel pokrýt chyby, které nebyly nikdy opraveny.

obával jsem se učení věcí, jako je smyčka událostí, což už nebylo tak, jak jsme kódovali. Měl jsem celou sekci, ve které jsem vysvětlil, proč byly souřadnice y obráceny. Protože PyGame byla zřídka aktualizována a je založena na staré knihovně SDL 1, spíše než na něco modernějšího, jako je OpenGL, nedržel jsem velkou naději do budoucna.,

chtěl jsem knihovnu, která byla jednodušší, výkonnější, a použít některé z nových funkcí pro Python 3, jako dekorace a type-hinting. Arcade je to. A takhle začít.

Instalace

Arkády, stejně jako mnoho dalších balíčků, je k dispozici přes PyPi, který znamená, že můžete nainstalovat Arcade pomocí pip příkaz (nebo pipenv příkaz)., Pokud již máte Python nainstalován, můžete pravděpodobně jen otevřít příkazový řádek v systému Windows a zadejte:

pip install arcade

Nebo na MacOS a Linux typ:

pip3 install arcade

podrobnější pokyny K instalaci, můžete odkazovat na Pasáže instalaci dokumentace.

jednoduchý výkres

můžete otevřít okno a vytvořit jednoduché výkresy s několika řádky kódu. Vytvoříme příklad, který nakreslí smajlík jako obrázek níže:

níže uvedený skript ukazuje, jak k tomu můžete použít příkazy pro kreslení Arcade., Všimněte si, že nemusíte vědět, jak používat třídy nebo dokonce definovat funkce. Programování s rychlou vizuální zpětnou vazbou je skvělé pro každého, kdo se chce začít učit programovat.

použití funkcí

psaní kódu v globálním kontextu samozřejmě není dobrá forma. Naštěstí zlepšení programu pomocí funkcí je snadné. Zde můžeme vidět příklad výkresu borovice na určitém místě (x, y) pomocí funkce:

úplný příklad viz výkres s funkcemi.,

více zkušený programátor bude vědět, že moderní grafické programy nejprve načíst informace, kreslení na grafické kartě, a pak se zeptejte grafické karty čerpat později jako dávkový. Arcade to také podporuje. Kreslení 10 000 obdélníků jednotlivě trvá asi 0,800 sekund. Kreslení je jako šarže trvá méně než 0,001 sekundy.

Třída oken

větší programy obvykle pocházejí z třídy oken nebo používají dekoratéry. To umožňuje programátor psát kód pro zpracování výkresu, aktualizace, a manipulaci vstup od uživatele., Šablona pro spuštění Window-založený program je níže.

třídaWindow má několik metod, které mohou vaše programy přepsat, aby poskytovaly funkci programu. Zde jsou některé z nejčastěji používaných:

  • on_draw: veškerý kód pro kreslení obrazovky jde sem.
  • update: veškerý kód pro přesun položek a provedení herní logiky jde sem. To se nazývá asi 60krát za sekundu.,
  • on_key_press: manipulujte s událostmi při stisknutí klávesy, například při rychlosti hráče.
  • on_key_release: rukojeť když je klíč uvolněn, zde můžete zastavit hráče v pohybu.
  • on_mouse_motion: toto se nazývá pokaždé, když se myš pohybuje.
  • on_mouse_press: voláno po stisknutí tlačítka myši.
  • set_viewport: Tato funkce se používá v rolování hry, když máte svět mnohem větší, než co lze vidět na jedné obrazovce., Volání set_viewport umožňuje programátorovi nastavit, která část tohoto světa je v současné době viditelná.

Skřítci

Skřítci jsou snadný způsob, jak vytvořit 2D bitmapovém objektu v Podloubí. Arcade má metody, které usnadňují kreslení, pohyb a animaci skřítků. Můžete také snadno použít skřítky k detekci kolizí mezi objekty.

vytvoření sprite

vytvoření instance třídy Arcade Sprite z grafiky je snadné. Programátor potřebuje pouze název souboru obrázku založit sprite off, a volitelně číslo pro měřítko obrazu nahoru nebo dolů., Například:

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

Tento kód vytvoří sprite, pomocí obrázek uložený v coin_01.png. Obraz bude zmenšen na 20% původní výšky a šířky.

sprite seznamy

Sprites jsou obvykle uspořádány do seznamů. Tyto seznamy usnadňují správu skřítků. Skřítci v seznamu budou používat OpenGL šarže-čerpat skřítci jako skupina. Níže uvedený kód nastavuje hru s hráčem a spoustu mincí, které hráč může sbírat. Používáme dva seznamy, jeden pro hráče a jeden pro mince.,

můžeme snadno nakreslit všechny mince v mince seznamy:

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

Detekce sprite kolize

funkce check_for_collision_with_list nám umožňuje vidět, zda sprite běží do jiného spritu v seznamu. Můžeme použít to vidět všechny mince hráč sprite je v kontaktu s. Pomocí jednoduché smyčky for se můžeme zbavit mince ze hry a zvýšit naše skóre.

úplný příklad viz collect_coins.py.

herní fyzika

mnoho her zahrnuje nějaký druh fyziky., Nejjednodušší jsou programy shora dolů, které zabraňují hráči procházet stěnami. Platformers přidat větší složitost s gravitací a platformy, které se pohybují. Některé hry používají plný 2D fyzikální engine s hmotností, tření, pružiny, a více.

hry shora dolů

pro jednoduché hry založené shora dolů potřebuje arkádový program seznam stěn, kterými se hráč (nebo cokoli jiného) nemůže pohybovat. Obvykle tomu říkám wall_list., Pak fyzikální engine je vytvořen v Window class instalační kód s:

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

player_sprite je dán pohyb vektoru s jeho dvěma atributy change_x change_y. Jednoduchým příkladem toho by bylo, kdyby se hráč pohyboval klávesnicí. Například to může být ve vlastním dítěti Window třída:

přestože tento kód nastavuje rychlost hráče,přehrávač se nepohybuje., Vupdate metodaWindow třídy, volání physics_engine.update() přesune přehrávač, ale ne přes stěny.

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

Pro plný příklad, viz sprite_move_walls.py.

Platformers

Stěhování do boční pohled plošinovka je poměrně snadné. Programátor stačí přepnout fyzikální engine na PhysicsEnginePlatformer a přidat gravitační konstantu.

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

můžete použít program jako kachlová položit dlaždice / bloky, které tvoří vaši úroveň.

příklad viz sprite_tiled_map.,py.

pro plnou 2D fyziku můžete integrovat knihovnu PyMunk.

Naučte se podle příkladu

jedním z nejlepších způsobů, jak se učit, je příklad. Arkádová knihovna má dlouhý seznam příkladových programů, na které může člověk čerpat při vytváření her. Tyto příklady ukazují herní koncept, o který studenti požádali v mých třídách nebo online v průběhu let.

spuštění některého z těchto ukázek je snadné, jakmile je nainstalována Arcade., Každý ze vzorků byl komentář na začátku programu pomocí příkazu můžete zadat na příkazovém řádku spustit vzorku, například:

python -m arcade.examples.sprite_moving_platforms

Shrnutí

Arkády vám umožní začít s programováním, grafikou a hry s snadný-k-rozumět kódu. Mnoho nových programátorů vytvořilo skvělé hry nedlouho po začátku. Zkus to!

Chcete-li se dozvědět více, zúčastněte se rozhovoru Paula Vincenta Cravena, snadné vytvoření 2D hry s Arcade, na PyCon Cleveland 2018.

Share

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *