Hur man skapar ett 2D-spel med Python och Arkadbiblioteket

Python är ett enastående språk för människor som lär sig att programmera, och perfekt för alla som vill ”få saker gjorda” och inte spendera massor av tid på boilerplate-kod. Arcade är en Python bibliotek för att skapa 2D videospel som är lätt att börja använda, och mycket kapabel som du får erfarenhet. I den här artikeln kommer jag att förklara hur man börjar använda Python och Arcade för att programmera videospel.

jag började utveckla på Arcade efter att ha undervisat studenter med Pygame-biblioteket., Jag lärde mig personligen att använda PyGame i nästan 10 år, och jag utvecklade ProgramArcadeGames.com att undervisa online. PyGame är bra, men så småningom kände jag att jag slösar bort tid att behöva täcka för buggar som aldrig fixades.

jag oroade mig för att undervisa saker som händelseslingan, vilket inte längre var sättet vi kodar. Jag hade en hel sektion där jag förklarade varför Y-koordinaterna var omvända. Eftersom PyGame sällan uppdaterades och det är baserat på ett gammalt SDL 1-bibliotek, snarare än något som mer modernt som OpenGL, hade jag inte mycket hopp för framtiden.,

jag ville ha ett bibliotek som var lättare att använda, kraftfullare och använde några av de nya funktionerna i Python 3, som dekoratörer och typ-hinting. Arcade är det. Och det här är hur man kommer igång.

Installation

Arcade, liksom många andra paket, som är tillgänglig via PyPi, vilket innebär att du kan installera Arkad med pip kommandot (eller pipenv kommando)., Om du redan har Python installerat kan du troligen bara öppna en kommandotolk på Windows och skriva:

pip install arcade

eller på MacOS och Linux-Typ:

pip3 install arcade

För mer detaljerade installationsanvisningar kan du referera till installationsdokumentationen för Arkad.

enkel ritning

Du kan öppna ett fönster och skapa enkla ritningar med bara några rader kod. Låt oss skapa ett exempel som drar ett leende ansikte som figuren nedan:

skriptet nedan visar hur du kan använda Arkadens ritningskommandon för att göra detta., Observera att du inte behöver veta hur du använder klasser eller ens definiera funktioner. Programmering med snabb visuell feedback är bra för alla som vill börja lära sig att programmera.

använda funktioner

naturligtvis är det inte bra att skriva kod i det globala sammanhanget. Tack och lov att förbättra ditt program med hjälp av funktioner är lätt. Här kan vi se ett exempel på en ritning en tall på en specifik (x, y) plats med hjälp av en funktion:

för hela exemplet, se ritning med funktioner.,

den mer erfarna programmeraren kommer att veta att moderna grafikprogram först laddar ritningsinformation på grafikkortet och sedan ber grafikkortet att rita det senare som ett parti. Arcade stöder detta också. Ritning 10.000 rektanglar individuellt tar cirka 0,800 sekunder. Att rita dem som ett parti tar mindre än 0,001 sekunder.

Fönsterklassen

större program kommer vanligtvis att härledas från Fönsterklassen eller använda dekoratörer. Detta gör det möjligt för en programmerare att skriva kod för att hantera ritning, uppdatering och hantering inmatning från användaren., En mall för en start enWindow-baserat program är nedan.

klassenWindow har flera metoder som dina program kan åsidosätta för att tillhandahålla funktionalitet till programmet. Här är några av de vanligaste:

  • on_draw: all kod för att rita skärmen går här.
  • update: all kod för att flytta dina objekt och utföra spellogik går här. Detta kallas ungefär 60 gånger per sekund.,
  • on_key_press: hantera händelser när en tangent trycks in, till exempel att ge en spelare en hastighet.
  • on_key_release: hantera när en nyckel släpps, här kan du stoppa en spelare från att flytta.
  • on_mouse_motion: detta kallas varje gång musen rör sig.
  • on_mouse_press: anropas när en musknapp trycks in.
  • set_viewport: denna funktion används i rullning spel, när du har en värld mycket större än vad som kan ses på en skärm., Anropa set_viewport tillåter en programmerare att ställa in vilken del av den världen som för närvarande är synlig.

Sprites

Sprites är ett enkelt sätt att skapa ett 2D bitmapped objekt i Arcade. Arcade har metoder som gör det enkelt att rita, flytta och animera sprites. Du kan också enkelt använda sprites för att upptäcka kollisioner mellan objekt.

skapa en sprite

skapa en instans av Arkadens Sprite klass av grafik är lätt. En programmerare behöver bara filnamnet på en bild för att basera sprite av, och eventuellt ett nummer för att skala bilden upp eller ner., Till exempel:

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

den här koden skapar en sprite med bilden som lagras i coin_01.png. Bilden skalas ner till 20% av sin ursprungliga höjd och bredd.

Sprite listor

Sprites är normalt organiserade i listor. Dessa listor gör det lättare att hantera sprites. Sprites i en lista kommer att använda OpenGL till batch-dra sprites som en grupp. Koden nedan sätter upp ett spel med en spelare och en massa mynt för spelaren att samla in. Vi använder två listor, en för spelaren och en för mynten.,

vi kan enkelt rita alla mynt i myntlistorna:

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

detektera spritekollisioner

funktionencheck_for_collision_with_list tillåter oss att se om en sprite går in i en annan sprite i en lista. Vi kan använda detta för att se alla mynt spelaren sprite är i kontakt med. Med en enkelfor loop kan vi bli av med myntet från spelet och öka vår poäng.

För det fullständiga exemplet, se collect_coins.py.

spelfysik

många spel inkluderar någon form av fysik., Det enklaste är top-down-program som hindrar spelaren från att gå genom väggar. Plattformsspel lägga till mer komplexitet med gravitation och plattformar som rör sig. Vissa spel använder en full 2D fysikmotor med massa, friktion, fjädrar och mycket mer.

Top-down-spel

för enkla top-down-baserade spel behöver ett Arkadprogram en lista över väggar som spelaren (eller något annat) inte kan röra sig igenom. Jag brukar kalla detta wall_list., Sedan skapas en fysikmotor i Window klassens inställningskod med:

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

player_sprite ges en rörelsevektor med sina två attribut change_x och change_y. Ett enkelt exempel på att göra detta skulle vara att få spelaren att flytta med tangentbordet. Det kan till exempel vara i det anpassade barnet i klassen Window:

även om den koden anger spelarens hastighet flyttar den inte spelaren., I update – metoden för Window – klassen kommer physics_engine.update() att flytta spelaren, men inte genom väggar.

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

för ett fullständigt exempel se sprite_move_walls.py.

Platformers

det är ganska enkelt att flytta till en sidovy plattformsspel. En programmerare behöver bara byta fysikmotorn till PhysicsEnginePlatformer och lägga till gravitationskonstanten.

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

Du kan använda ett program som Tiled för att lägga brickor / block som utgör din nivå.

för ett exempel, se sprite_tiled_map.,py.

För fullständig 2D-fysik kan du integrera PyMunk-biblioteket.

lär dig genom exempel

ett av de bästa sätten att lära sig är genom exempel. Arkadbiblioteket har en lång lista med exempelprogram som en person kan dra på för att skapa spel. Dessa exempel visar varje spelkoncept som eleverna har bett om i mina klasser eller online genom åren.

kör någon av dessa demos är lätt när Arcade har installerats., Var och en av proverna har en kommentar i början av programmet med ett kommando som du kan skriva på kommandoraden för att köra provet, till exempel:

python -m arcade.examples.sprite_moving_platforms

sammanfattning

Arcade kan du börja programmera grafik och spel med lätt att förstå kod. Många nya programmerare har skapat bra spel inte långt efter att komma igång. Försök!

för att lära dig mer, delta i Paul Vincent Cravens talk, lätt 2D-spelskapande med Arcade, på PyCon Cleveland 2018.

Share

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *