Hoe maak je een 2D spel met Python en de Arcade bibliotheek

Python is een uitstekende taal voor mensen die leren programmeren, en perfect voor iedereen die wil “krijgen dingen gedaan” en niet veel tijd besteden aan boilerplate code. Arcade is een Python-bibliotheek voor het maken van 2D-videospellen die gemakkelijk te gebruiken zijn en zeer geschikt als je ervaring opdoet. In dit artikel zal ik uitleggen hoe je Python en Arcade kunt gebruiken om videospellen te programmeren.

Ik ben begonnen met de ontwikkeling van Arcade nadat ik leerlingen les had gegeven met behulp van de pygame bibliotheek., Ik gaf bijna 10 jaar persoonlijk les met PyGame, en ontwikkelde ProgramArcadeGames.com om online les te geven. PyGame is geweldig, maar uiteindelijk voelde ik me alsof ik was het verspillen van tijd te moeten dekken voor bugs die nooit zijn opgelost.

Ik maakte me zorgen over het onderwijzen van dingen als de event loop, die niet langer de manier was waarop we coderen. Ik had een hele sectie waarin ik uitlegde waarom de Y-coördinaten omgekeerd waren. Omdat PyGame zelden werd bijgewerkt en het gebaseerd is op een oude SDL 1 bibliotheek, in plaats van iets moderner zoals OpenGL, had ik niet veel hoop voor de toekomst.,

ik wilde een bibliotheek die gemakkelijker te gebruiken was, krachtiger, en gebruikte een aantal van de nieuwe functies van Python 3, zoals decorators en type-hinting. Arcade is het. En zo begin je.

installatie

Arcade is, net als veel andere pakketten, beschikbaar via PyPi, wat betekent dat u Arcade kunt installeren met het pip commando (of het pipenv Commando)., Als u Python al hebt geïnstalleerd, kunt u waarschijnlijk gewoon een opdrachtprompt openen op Windows en typen:

pip install arcade

of op MacOS en Linux type:

pip3 install arcade

voor meer gedetailleerde installatie-instructies kunt u verwijzen naar de arcade installatie documentatie.

eenvoudige tekening

u kunt een venster openen en eenvoudige tekeningen maken met slechts een paar regels code. Laten we een voorbeeld maken dat een smiley tekent zoals de afbeelding hieronder:

het script hieronder laat zien hoe je Arcade ‘ s tekenopdrachten kunt gebruiken om dit te doen., Merk op dat je niet hoeft te weten hoe je klassen moet gebruiken of zelfs functies moet definiëren. Programmeren met snelle visuele feedback is geweldig voor iedereen die wil leren programmeren.

gebruikmakend van functies

natuurlijk is het schrijven van code in de globale context geen goede vorm. Gelukkig is het verbeteren van uw programma met behulp van functies eenvoudig. Hier kunnen we een voorbeeld zien van een tekening van een dennenboom op een specifieke (x, y) locatie met behulp van een functie:

Voor het volledige voorbeeld, zie tekenen met functies.,

de meer ervaren programmeur zal weten dat moderne grafische programma ‘ s eerst tekeninformatie op de grafische kaart laden, en vervolgens de grafische kaart vragen om het later als een batch te tekenen. Arcade ondersteunt dit ook. Het individueel tekenen van 10.000 rechthoeken duurt ongeveer 0,800 seconden. Tekenen als een batch duurt minder dan 0,001 seconden.

de Vensterklasse

Grotere programma ‘ s zullen doorgaans afkomstig zijn van de Vensterklasse, of decorators gebruiken. Dit staat een programmeur toe om code te schrijven om het tekenen, het bijwerken, en het behandelen van input van de gebruiker af te handelen., Een sjabloon voor het starten van een Window-gebaseerd programma staat hieronder.

De Window klasse heeft verschillende methoden die uw programma ‘ s kunnen overschrijven om functionaliteit aan het programma te bieden. Hier zijn enkele van de meest gebruikte:

  • on_draw: alle code om het scherm te tekenen gaat hier.
  • update: alle code om uw items te verplaatsen en spellogica uit te voeren, vindt u hier. Dit wordt ongeveer 60 keer per seconde genoemd.,
  • on_key_press: gebeurtenissen verwerken wanneer een toets wordt ingedrukt, zoals het geven van een speler een snelheid.
  • on_key_release: Handle wanneer een sleutel wordt vrijgegeven, kunt u hier een speler tegenhouden om te bewegen.
  • on_mouse_motion: dit wordt elke keer als de muis beweegt aangeroepen.
  • on_mouse_press: aangeroepen wanneer een muisknop wordt ingedrukt.
  • set_viewport: deze functie wordt gebruikt in scrollende spellen, Wanneer je een wereld hebt die veel groter is dan wat op één scherm te zien is., Het aanroepen van set_viewport stelt een programmeur in staat om in te stellen welk deel van die wereld momenteel zichtbaar is.

Sprites

Sprites zijn een eenvoudige manier om een 2D bitmap object in Arcade te maken. Arcade heeft methoden die het gemakkelijk maken om sprites te tekenen, verplaatsen en animeren. U kunt ook gemakkelijk sprites gebruiken om botsingen tussen objecten te detecteren.

het maken van een sprite

het maken van een instantie van Arcade ‘ s Sprite klasse uit een afbeelding is eenvoudig. Een programmeur heeft alleen de bestandsnaam van een image nodig om de sprite te baseren, en optioneel een getal om de image omhoog of omlaag te schalen., Bijvoorbeeld:

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

deze code zal een sprite aanmaken met behulp van de afbeelding opgeslagen in coin_01.png. De afbeelding wordt verkleind tot 20% van de oorspronkelijke hoogte en breedte.

Sprite lijsten

Sprites worden normaal georganiseerd in lijsten. Deze lijsten maken het makkelijker om de sprites te beheren. Sprites in een lijst zullen OpenGL gebruiken om de sprites als een groep te tekenen. De code hieronder stelt een spel met een speler, en een bos van munten voor de speler te verzamelen. We gebruiken twee lijsten, een voor de speler en een voor de munten.,

We kunnen eenvoudig alle munten in de muntlijsten tekenen:

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

sprite-botsingen detecteren

de functie check_for_collision_with_list stelt ons in staat om te zien of een sprite in een andere sprite in een lijst voorkomt. We kunnen dit gebruiken om alle munten te zien waarmee de speler sprite in contact staat. Met behulp van een eenvoudige for lus, kunnen we de munt uit het spel verwijderen en onze score verhogen.

voor het volledige voorbeeld, zie collect_coins.py.

spelfysica

veel spellen bevatten een soort fysica., De eenvoudigste zijn top-down programma ‘ s die voorkomen dat de speler van het lopen door muren. Platformers voegen meer complexiteit toe met zwaartekracht en platforms die bewegen. Sommige spellen gebruiken een volledige 2D physics engine met massa, wrijving, veren en meer.

Top-down spellen

voor eenvoudige top-down spellen heeft een Arcade programma een lijst nodig van muren waar de speler (of iets anders) niet doorheen kan. Ik noem dit meestal wall_list., Vervolgens wordt een physics engine aangemaakt in de Window setup code van de klasse met:

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

de player_sprite krijgt een bewegingsvector met zijn twee attributen change_x en change_y. Een eenvoudig voorbeeld van dit te doen zou zijn om de speler te bewegen met het toetsenbord. Bijvoorbeeld, dit kan in de aangepaste dochter van de Window klasse:

hoewel die code De snelheid van de speler bepaalt, wordt de speler niet verplaatst., In deupdate methode van deWindow klasse, zal het aanroepen vanphysics_engine.update() de speler verplaatsen, maar niet door muren.

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

voor een volledig voorbeeld zie sprite_move_walls.py.

Platformers

verplaatsen naar een zijaanzicht platformer is vrij eenvoudig. Een programmeur hoeft alleen maar de physics engine te schakelen naar PhysicsEnginePlatformer en de zwaartekrachtconstante toe te voegen.

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

u kunt een programma als Betiled gebruiken om de tegels/blokken te leggen die deel uitmaken van uw niveau.

voor een voorbeeld, zie sprite_tiled_map.,py.

voor volledige 2d-fysica kunt u de pymunk-bibliotheek integreren.

Leer door voorbeeld

een van de beste manieren om te leren is door voorbeeld. De arcade bibliotheek heeft een lange lijst van voorbeeldprogramma ‘ s die een persoon kan gebruiken om games te maken. Deze voorbeelden tonen elk een spelconcept waar studenten in de loop der jaren om hebben gevraagd in mijn lessen of online.

het uitvoeren van een van deze demo ‘ s is eenvoudig zodra Arcade is geïnstalleerd., Elk van de voorbeelden heeft een commentaar aan het begin van het programma met een commando dat u op de opdrachtregel kunt typen om het voorbeeld uit te voeren, bijvoorbeeld:

python -m arcade.examples.sprite_moving_platforms

samenvatting

Arcade laat u beginnen met het programmeren van afbeeldingen en games met eenvoudig te begrijpen code. Veel nieuwe programmeurs hebben geweldige games gemaakt niet lang na het begin. Probeer het eens!

voor meer informatie, ga naar Paul Vincent Craven ‘ s talk, Easy 2D Game Creation With Arcade, op PyCon Cleveland 2018.

Share

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *