Python er et fremragende sprog for folk, der lærer at programmere, og perfekt til alle, der ønsker at “få ting gjort” og ikke bruge masser af tid på standardtekst kode. Arcade er et Python-bibliotek til oprettelse af 2D-videospil, der er let at begynde at bruge, og meget dygtig, når du får erfaring. I denne artikel vil jeg forklare, hvordan man begynder at bruge Python og Arcade til at programmere videospil.
Jeg startede udviklingen på Arcade efter undervisning studerende ved hjælp af PyGame bibliotek., Jeg lærte personligt ved hjælp af PyGame i næsten 10 flere år, og jeg udviklede ProgramArcadeGames.com at undervise online. PyGame er fantastisk, men til sidst følte jeg, at jeg spildte tid på at skulle dække for fejl, der aldrig blev rettet.
Jeg var bekymret for at undervise i ting som begivenhedssløjfen, som ikke længere var den måde, vi koder på. Jeg havde et helt afsnit, hvor jeg forklarede, hvorfor y-koordinaterne blev vendt. Fordi PyGame sjældent blev opdateret, og det er baseret på et gammelt SDL 1-bibliotek, snarere end noget mere moderne som OpenGL, havde jeg ikke meget håb for fremtiden.,
jeg ønskede et bibliotek, der var lettere at bruge, mere kraftfuldt og brugte nogle af de nye funktioner i Python 3, som dekoratører og type-hinting. Arcade er det. Og sådan kommer du i gang.
Installation
Arcade, som mange andre pakker, der er tilgængelige via PyPi, hvilket betyder, at du kan installere Arcade hjælp pip
– kommandoen (eller pipenv kommando)., Hvis du allerede har Python installeret, kan du sandsynligvis bare åbne en kommandoprompt på en Windows, og skriv:
pip install arcade
Eller på MacOS og Linux type:
pip3 install arcade
For mere detaljerede instruktioner, du kan henvise til Arcade installation dokumentation.
enkel tegning
Du kan åbne et vindue og oprette enkle tegninger med blot et par kodelinjer. Lad os oprette et eksempel, der tegner et smiley-ansigt som figuren nedenfor:
scriptet nedenfor viser, hvordan du kan bruge arcades tegningskommandoer til at gøre dette., Bemærk, at du ikke behøver at vide, hvordan du bruger klasser eller endda definerer funktioner. Programmering med hurtig visuel feedback er fantastisk til alle, der ønsker at begynde at lære at programmere.
brug af funktioner
selvfølgelig er det ikke en god form at skrive kode i den globale kontekst. Heldigvis forbedre dit program ved hjælp af funktioner er let. Her kan vi se et eksempel på en tegning af et fyrretræ på en bestemt (,, y) placering ved hjælp af en funktion:
For det fulde eksempel, se tegning med funktioner.,
den mere erfarne programmør vil vide, at moderne grafikprogrammer først indlæser tegningsoplysninger på grafikkortet, og derefter bede grafikkortet om at tegne det senere som en batch. Arcade understøtter dette så godt. Tegning 10.000 rektangler individuelt tager omkring 0,800 sekunder. Tegning dem som et parti tager mindre at 0,001 sekunder.
Vinduesklassen
større programmer vil typisk stamme fra Vinduesklassen eller bruge dekoratører. Dette gør det muligt for en programmør at skrive kode til at håndtere tegning, opdatering og håndtering af input fra brugeren., En skabelon til en startende en Window
-baseret program er under.
Window
klassen har flere metoder, som dine programmer kan tilsidesætte for at give funktionalitet til programmet. Her er nogle af de mest almindeligt anvendte:
-
on_draw
: al koden til at tegne skærmen går her. -
update
: al koden til at flytte dine emner og udføre spil logik går her. Dette kaldes omkring 60 gange i sekundet., -
on_key_press
: Håndter begivenheder, når der trykkes på en tast, såsom at give en spiller en hastighed. -
on_key_release
: håndtag når en nøgle frigives, her kan du stoppe en spiller fra at flytte. -
on_mouse_motion
: dette kaldes hver gang musen bevæger sig. -
on_mouse_press
: kaldes, når der trykkes på en museknap. -
set_viewport
: Denne funktion bruges i rulle-spil, når du har en verden, der er meget større end hvad der kan ses på en skærm., Opkaldset_viewport
tillader en programmør at indstille, hvilken del af denne verden der i øjeblikket er synlig.
Sprites
Sprites er en nem måde at oprette et 2D bitmappet objekt i Arcade. Arcade har metoder, der gør det nemt at tegne, flytte og animere sprites. Du kan også nemt bruge sprites til at opdage kollisioner mellem objekter.
oprettelse af en sprite
oprettelse af en forekomst af Arcade s Sprite klasse ud af en grafik er let. En programmør behøver kun filnavnet på et billede til at basere sprite ud af, og eventuelt et tal til at skalere billedet op eller ned., For eksempel:
SPRITE_SCALING_COIN = 0.2
coin = arcade.Sprite("coin_01.png", SPRITE_SCALING_COIN)
denne kode opretter en sprite ved hjælp af billedet gemt i coin_01.png
. Billedet skaleres ned til 20% af dets oprindelige højde og bredde.
sprite lister
Sprites er normalt organiseret i lister. Disse lister gør det lettere at administrere sprites. Sprites i en liste vil bruge OpenGL at batch-tegne sprites som en gruppe. Koden nedenfor opstiller et spil med en spiller, og en masse mønter for spilleren at indsamle. Vi bruger to lister, en til spilleren og en til mønterne.,
Vi kan nemt trække alle de mønter i mønten lister:
def on_draw(self):
""" Draw everything """
arcade.start_render()
self.coin_list.draw()
self.player_list.draw()
Detektering sprite kollisioner
funktion check_for_collision_with_list
giver os mulighed for at se, om en sprite kører ind i en anden sprite i en liste. Vi kan bruge dette til at se alle de mønter spilleren sprite er i kontakt med. Ved hjælp af en simpel for
loop, kan vi slippe af med mønten fra spillet og øge vores score.
for det fulde eksempel, se collect_coins.py.
spilfysik
mange spil inkluderer en slags fysik., De enkleste er top-do .n-programmer, der forhindrer afspilleren i at gå gennem vægge. Platformere tilføjer mere kompleksitet med tyngdekraft og platforme, der bevæger sig. Nogle spil bruger en fuld 2D fysikmotor med masse, friktion, fjedre og meget mere.
Top-do .n spil
for simple top-do .n baserede spil, et Arkadeprogram har brug for en liste over vægge, som spilleren (eller noget andet) ikke kan bevæge sig igennem. Jeg kalder normalt dette wall_list
., Så en fysik-motor, er skabt i Window
class setup-kode med:
self.physics_engine = arcade.PhysicsEngineSimple(self.player_sprite, self.wall_list)
player_sprite
er givet en bevægelse vektor med de to attributter change_x
og change_y
. Et simpelt eksempel på at gøre dette ville være at få spilleren til at bevæge sig med tastaturet. For eksempel kan dette være i det brugerdefinerede barn i Window
klasse:
selvom denne kode indstiller spillerens hastighed, bevæger den ikke afspilleren., I update
metoden til Window
klassen, kalder physics_engine.update()
vil flytte afspilleren, men ikke gennem vægge.
def update(self, delta_time):
""" Movement and game logic """
self.physics_engine.update()
For en fuld eksempel se sprite_move_walls.py.
Platformspil
at Flytte til en side view platformerstabilizer er ret nemt. En programmør skal bare skifte fysikmotoren til PhysicsEnginePlatformer
og tilføje tyngdekraften konstant.
self.physics_engine = arcade.PhysicsEnginePlatformer(self.player_sprite,
self.wall_list,
gravity_constant=GRAVITY)
Du kan bruge et program som Flisebelagt til at lægge de fliser / blokke, der udgør dit niveau.
For et eksempel, se sprite_tiled_map.,py.
for fuld 2D fysik kan du integrere pymunk biblioteket.
Lær ved eksempel
en af de bedste måder at lære er ved eksempel. Arkadebiblioteket har en lang liste med eksempler på programmer, som en person kan trække på for at oprette spil. Disse eksempler viser hver et spilkoncept, som studerende har bedt om i mine klasser eller online gennem årene.det er let at køre nogen af disse demoer, når Arcade er installeret., Hver af de prøver, der har en kommentar i starten af programmet med en kommando, kan du skrive på kommando-linje til at køre prøven, for eksempel:
python -m arcade.examples.sprite_moving_platforms
Oversigt
Arkade kan du starte programmering, grafik og spil med nem at forstå koden. Mange nye programmører har skabt fantastiske spil ikke længe efter at komme i gang. Giv det en chance!for at lære mere skal du deltage i Paul Vincent Craven ‘ s talk, Easy 2D Game Creation Withith Arcade på PyCon Cleveland 2018.