So erstellen Sie ein 2D-Spiel mit Python und der Arcade-Bibliothek

Python ist eine hervorragende Sprache für Leute, die programmieren lernen, und perfekt für alle, die „Sachen erledigen“ und nicht viel Zeit mit Boilerplate-Code verbringen möchten. Arcade ist eine Python-Bibliothek zum Erstellen von 2D-Videospielen, die einfach zu bedienen und beim Sammeln von Erfahrungen sehr leistungsfähig ist. In diesem Artikel werde ich erklären, wie man Python und Arcade zum Programmieren von Videospielen verwendet.

Ich habe mit der Entwicklung von Arcade begonnen, nachdem ich Schülern die PyGame-Bibliothek beigebracht hatte., Ich habe fast 10 Jahre lang persönlich mit PyGame unterrichtet und entwickelt ProgramArcadeGames.com online unterrichten. PyGame ist großartig, aber irgendwann hatte ich das Gefühl, Zeit damit verschwenden zu müssen, Fehler zu beheben, die nie behoben wurden.

Ich machte mir Sorgen, Dinge wie die Ereignisschleife zu unterrichten, die nicht mehr so war, wie wir codierten. Ich hatte einen ganzen Abschnitt, in dem ich erklärte, warum die y-Koordinaten umgekehrt wurden. Da PyGame selten aktualisiert wurde und auf einer alten SDL 1-Bibliothek und nicht auf etwas Modernerem wie OpenGL basiert, hatte ich nicht viel Hoffnung für die Zukunft.,

Ich wollte eine Bibliothek, die einfacher zu bedienen, leistungsfähiger und verwendet einige der neuen Funktionen von Python 3, wie Dekorateure und Typ-hinting. Arcade ist es. Und so fängt man an.

Installation

Arcade ist wie viele andere Pakete über PyPI verfügbar, was bedeutet, dass Sie Arcade mit dem Befehl pip (oder dem Befehl pipenv) installieren können., Wenn Sie Python bereits installiert haben, können Sie wahrscheinlich einfach eine Eingabeaufforderung unter Windows öffnen und Folgendes eingeben:

pip install arcade

Oder unter macOS und Linux Typ:

pip3 install arcade

Weitere Installationsanweisungen finden Sie in der Arcade-Installationsdokumentation.

Einfache Zeichnung

Sie können ein Fenster öffnen und einfache Zeichnungen mit nur wenigen Codezeilen erstellen. Lassen Sie uns ein Beispiel erstellen, das ein Smiley-Gesicht wie in der folgenden Abbildung zeichnet:

Das folgende Skript zeigt, wie Sie dazu die Zeichenbefehle von Arcade verwenden können., Beachten Sie, dass Sie nicht wissen müssen, wie Sie Klassen verwenden oder sogar Funktionen definieren. Programmierung mit schnellem visuellem Feedback ist ideal für alle, die programmieren lernen möchten.

Mit Funktionen

Natürlich ist das Schreiben von Code im globalen Kontext keine gute Form. Zum Glück ist es einfach, Ihr Programm mithilfe von Funktionen zu verbessern. Hier können wir ein Beispiel für eine Zeichnung einer Kiefer an einem bestimmten sehen (x, y) Lage mit einer Funktion:

Für das vollständige Beispiel, siehe Zeichnung mit Funktionen.,

Der erfahrenere Programmierer weiß, dass moderne Grafikprogramme zuerst Zeichnungsinformationen auf die Grafikkarte laden und dann die Grafikkarte bitten, sie später als Stapel zu zeichnen. Arcade unterstützt dies auch. Das Zeichnen von 10.000 Rechtecken einzeln dauert etwa 0,800 Sekunden. Das Zeichnen als Stapel dauert weniger als 0,001 Sekunden.

Die Fensterklasse

Größere Programme leiten sich normalerweise von der Fensterklasse ab oder verwenden Dekoratoren. Auf diese Weise kann ein Programmierer Code schreiben, um das Zeichnen, Aktualisieren und Verarbeiten von Eingaben des Benutzers zu verarbeiten., Eine Vorlage für einen Start eines Window – basiertes Programm ist unten.

DieWindow – Klasse verfügt über mehrere Methoden, die Ihre Programme überschreiben können, um dem Programm Funktionalität zu bieten. Hier sind einige der am häufigsten verwendeten:

  • on_draw: Der gesamte Code zum Zeichnen des Bildschirms wird hier angezeigt.
  • update: Der gesamte Code zum Verschieben Ihrer Gegenstände und zum Ausführen der Spiellogik finden Sie hier. Dies wird etwa 60 Mal pro Sekunde aufgerufen.,
  • on_key_press: Behandeln Sie Ereignisse, wenn eine Taste gedrückt wird, z. B. um einem Player eine Geschwindigkeit zu geben.
  • on_key_release: Handle wenn eine Taste losgelassen wird, können Sie hier einen Player daran hindern, sich zu bewegen.
  • on_mouse_motion: Dies wird jedes Mal aufgerufen, wenn sich die Maus bewegt.
  • on_mouse_press: wird Aufgerufen, wenn eine Maustaste gedrückt wird.
  • : Diese Funktion wird beim Scrollen von Spielen verwendet, wenn Sie eine Welt haben, die viel größer ist als auf einem Bildschirm., Durch Aufrufen von set_viewport kann ein Programmierer festlegen, welcher Teil dieser Welt derzeit sichtbar ist.

Sprites

– Sprites sind eine einfache Möglichkeit, ein 2D-Bitmap-Objekt in der Arcade. Arcade verfügt über Methoden, mit denen Sprites einfach gezeichnet, bewegt und animiert werden können. Sie können Sprites auch einfach verwenden, um Kollisionen zwischen Objekten zu erkennen.

Erstellen eines Sprite

Das Erstellen einer Instanz der Sprite-Klasse von Arcade aus einer Grafik ist einfach. Ein Programmierer benötigt nur den Dateinamen eines Bildes, um das Sprite zu erstellen, und optional eine Zahl, um das Bild nach oben oder unten zu skalieren., Beispiel:

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

Dieser Code erstellt ein Sprite mit dem in coin_01.pnggespeicherten Bild. Das Bild wird auf 20% seiner ursprünglichen Höhe und Breite verkleinert.

Spritelisten

Sprites sind normalerweise in Listen organisiert. Diese Listen erleichtern die Verwaltung der sprites. Sprites in einer Liste verwenden OpenGL, um die Sprites als Gruppe stapelweise zu zeichnen. Der folgende Code richtet ein Spiel mit einem Spieler und eine Reihe von Münzen ein, die der Spieler sammeln kann. Wir verwenden zwei Listen, eine für den Spieler und eine für die Münzen.,

Wir können alle Münzen in den Münzlisten leicht zeichnen:

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

Erkennen von Sprite-Kollisionen

Die Funktion check_for_collision_with_list ermöglicht es uns zu sehen, ob ein Sprite in ein anderes Sprite in einer Liste läuft. Wir können dies verwenden, um alle Münzen zu sehen, mit denen das Spieler-Sprite in Kontakt steht. Mit einer einfachenfor Schleife können wir die Münze aus dem Spiel entfernen und unsere Punktzahl erhöhen.

Das vollständige Beispiel finden Sie unter collect_coins.py.

Spielphysik

Viele Spiele enthalten eine Art Physik., Die einfachsten sind Top-Down-Programme, die verhindern, dass der Spieler durch Wände geht. Plattformer fügen mehr Komplexität mit Schwerkraft und Plattformen hinzu, die sich bewegen. Einige Spiele verwenden eine vollständige 2D-Physik-Engine mit Masse, Reibung, Federn und mehr.

Top-Down-Spiele

Für einfache Top-Down-basierte Spiele benötigt ein Arcade-Programm eine Liste von Wänden, durch die sich der Spieler (oder irgendetwas anderes) nicht bewegen kann. Normalerweise nenne ich dies wall_list., Anschließend wird im Einrichtungscode der Window – Klasse eine Physik-Engine erstellt mit:

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

Die player_sprite erhält einen Bewegungsvektor mit seinen beiden Attributen change_x und change_y. Ein einfaches Beispiel dafür wäre, den Spieler mit der Tastatur bewegen zu lassen. Dies könnte beispielsweise im benutzerdefinierten untergeordneten Element der Window – Klasse sein:

Obwohl dieser Code die Geschwindigkeit des Players festlegt, bewegt er den Player nicht., In der update – Methode der Window – Klasse bewegt der Aufruf von physics_engine.update() den Player, jedoch nicht durch Wände.

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

Ein vollständiges Beispiel finden Sie unter sprite_move_walls.py.

Plattformer

Der Wechsel zu einem Seitenansicht-Plattformer ist ziemlich einfach. Ein Programmierer muss nur die Physik-Engine auf und die Schwerkraftkonstante hinzufügen.

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

Sie können ein Programm wie Tiled verwenden, um die Kacheln/Blöcke zu verlegen, aus denen Ihr Level besteht.

Ein Beispiel finden Sie unter sprite_tiled_map.,py.

Für vollständige 2D-Physik können Sie die PyMunk-Bibliothek integrieren.

Mit gutem Beispiel lernen

Eine der besten Möglichkeiten zum Lernen ist mit gutem Beispiel vorangehen. Die Arcade-Bibliothek verfügt über eine lange Liste von Beispielprogrammen, auf die eine Person zurückgreifen kann, um Spiele zu erstellen. Diese Beispiele zeigen jeweils ein Spielkonzept, nach dem die Schüler im Laufe der Jahre in meinen Klassen oder online gefragt haben.

Das Ausführen eines dieser Demos ist einfach, sobald Arcade installiert wurde., Jedes der Beispiele hat einen Kommentar am Anfang des Programms mit einem Befehl, den Sie in die Befehlszeile eingeben können, um das Beispiel auszuführen, zum Beispiel:

python -m arcade.examples.sprite_moving_platforms

Zusammenfassung

Arcade können Sie mit der Programmierung von Grafiken und Spielen mit leicht verständlichem Code beginnen. Viele neue Programmierer haben große Spiele nicht lange nach dem Einstieg erstellt. Probieren Sie es aus!

Um mehr zu erfahren, besuchen Sie Paul Vincent Cravens Vortrag, Einfache 2D – Spieleerstellung mit Arcade, auf der PyCon Cleveland 2018.

Share

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.