Hallo allerseits!
Wir teilen Ihnen weiterhin interessante Dinge mit, die über die kleine Python gefunden wurden. Heute haben wir uns für 2D-Spiele entschieden. Dies ist natürlich etwas einfacher als das, was wir in unserem
Python Developer- Kurs haben, aber es ist sicherlich nicht weniger interessant.
ÜBERTRAGUNGOriginalartikel - opensource.com/article/18/4/easy-2d-game-creation-python-and-arcade
Gepostet von Paul Vincent CravenLass uns gehen.
Python ist eine hervorragende Sprache für Anfänger, um Programmieren zu lernen. Es ist auch ideal für diejenigen, die "nur nehmen und tun" möchten, anstatt viel Zeit mit Boilerplate-Code zu verbringen.
Arcade ist eine Python-Bibliothek zum Erstellen von 2D-Spielen mit einer niedrigen Einstiegsschwelle, die jedoch in erfahrenen Händen sehr funktional ist. In diesem Artikel werde ich erklären, wie Sie Python und Arcade zum Programmieren von Spielen verwenden.
Ich begann mit der Entwicklung von Arcade, nachdem
ich den Schülern die Grundlagen der
PyGame- Bibliothek
beigebracht hatte . Ich unterrichte PyGames seit fast 10 Jahren persönlich und habe auch
ProgramArcadeGames.com für das Online-Lernen entwickelt. PyGames ist großartig, aber irgendwann wurde mir klar, dass ich es satt hatte, Zeit zu verschwenden, um Fehler zu rechtfertigen
, die niemals behoben werden konnten .
Ich war besorgt darüber, Dinge wie die
Ereignisschleife zu unterrichten , die fast nie benutzt wurden. Und es gab
einen ganzen Abschnitt, in dem ich erklärte, warum die y-Koordinaten in die entgegengesetzte Richtung gedreht werden. PyGames wurde selten aktualisiert und basierte auf der alten
SDL 1- Bibliothek und nicht auf etwas Modernerem wie
OpenGL . Ich habe nicht mit einer glänzenden Zukunft gerechnet.
In meinen Träumen gab es eine einfache und leistungsstarke Bibliothek, die neue Funktionen von Python 3 verwendete, zum Beispiel Dekoratoren und Tipphinweise. Sie stellte sich als Arcade heraus. Mal sehen, wie man es benutzt.

Installation
Arcade ist wie viele andere Pakete auf
PyPi verfügbar.
Dies bedeutet, dass Sie Arcade mit dem
Befehl pip (oder
pipenv ) installieren können. Wenn Python bereits installiert ist, können Sie höchstwahrscheinlich einfach die Windows-Eingabeaufforderung öffnen und schreiben:
pip install arcade
Und unter Linux und MacOS:
pip3 install arcade
Ausführlichere Installationsanweisungen finden Sie in der Arcade-Installationsdokumentation.
Einfaches Zeichnen
Sie können das Fenster öffnen und mit nur wenigen Codezeilen eine einfache Zeichnung zeichnen. Zeichnen wir als Beispiel einen Smiley wie im Bild unten:

Das folgende Skript zeigt, wie dies mithilfe von Arcade-Zeichenbefehlen ausgeführt wird. Beachten Sie, dass Sie nicht wissen müssen, wie Klassen verwendet oder Funktionen definiert werden. Das Programmieren mit einem schnellen visuellen Feedback ist ein guter Anfang für diejenigen, die gerade lernen.
import arcade
Funktionen verwenden
Natürlich ist das Schreiben von Code in einem globalen Kontext nicht der beste Weg. Glücklicherweise hilft die Verwendung von Funktionen dabei, Ihren Code zu verbessern. Im Folgenden finden Sie ein Beispiel für das Zeichnen eines Baums in den angegebenen Koordinaten (x, y) mithilfe der folgenden Funktion:
def draw_pine_tree(x, y): """ """
Ein vollständiges Beispiel finden Sie in der
Zeichnung mit Funktionen .

Erfahrene Programmierer wissen, dass moderne Programme zuerst Grafikinformationen auf die Grafikkarte hochladen und sie dann auffordern, eine Batchdatei zu zeichnen.
Arcade wird unterstützt . Das individuelle Zeichnen von 10.000 Rechtecken dauert 0,8 Sekunden. Das Zeichnen des gleichen Betrags mit einer Batchdatei dauert weniger als 0,001 Sekunden.
Fensterklasse
Große Programme basieren normalerweise auf der
Window- Klasse oder verwenden
Dekoratoren . Auf diese Weise kann der Programmierer Code schreiben, der das Rendern, Aktualisieren und Verarbeiten von Benutzereingaben steuert. Unten finden Sie eine Vorlage für ein Programm mit einem Fenster.
import arcade SCREEN_WIDTH = 800 SCREEN_HEIGHT = 600 class MyGame(arcade.Window): """ . """ def __init__(self, width, height): super().__init__(width, height) arcade.set_background_color(arcade.color.AMAZON) def setup(self):
Die Window-Klasse verfügt über mehrere Methoden, die Ihre Programme überschreiben können, um Funktionen bereitzustellen. Hier ist eine Liste der am häufigsten verwendeten:
- on_draw: Der gesamte Code zum Rendern des Bildschirms befindet sich hier.
- Update: Der gesamte Code zum Verschieben von Objekten und zum Ausarbeiten der Spielelogik ist hier. Wird ungefähr 60 Mal pro Sekunde aufgerufen.
- on_key_press: Behandelt Ereignisse, wenn eine Taste gedrückt wird, z. B. die Bewegung eines Charakters.
- on_key_release: Behandelt Ereignisse, wenn eine Schaltfläche losgelassen wird, z. B. das Stoppen eines Zeichens.
- on_mouse_motion: Wird jedes Mal aufgerufen, wenn sich die Maus bewegt.
- on_mouse_press: Wird aufgerufen, wenn die Maustaste gedrückt wird.
- set_viewport: Diese Funktion wird in Scrollern verwendet, wenn die Welt viel größer ist als auf einem Bildschirm sichtbar. Durch Aufrufen von set_viewport kann der Programmierer den Teil des Bildschirms angeben, der sichtbar sein soll.
Sprites
Sprites sind eine einfache Möglichkeit, 2D-Bitmap-Features in Arcade zu erstellen. Es verfügt über Methoden, mit denen Sprites einfach gezeichnet, verschoben und animiert werden können. Sie können auch Sprites verwenden, um Kollisionen zwischen Objekten zu verfolgen.
Sprite-Erstellung
Das Erstellen einer Arcite
Sprite- Instanz ist sehr einfach. Der Programmierer benötigt nur den Namen der Bilddatei, auf der das Sprite basiert, und optional die Häufigkeit, mit der das Bild vergrößert oder verkleinert wird. Zum Beispiel:
SPRITE_SCALING_COIN = 0.2 coin = arcade.Sprite("coin_01.png", SPRITE_SCALING_COIN)
Dieser Code erstellt ein Sprite mit dem Bild coin_01.png. Das Bild wird auf 20% des Originals reduziert.
Sprite-Liste
Sprites sind normalerweise in Listen organisiert. Sie helfen, ihre Verwaltung zu vereinfachen. Die Sprites in der Liste verwenden OpenGl für das Rendern von Gruppenstapeln. Der folgende Code richtet das Spiel ein, in dem sich ein Spieler und viele Münzen befinden, die der Spieler sammeln muss. Wir verwenden zwei Listen - eine für den Spieler und eine für die Münzen.
def setup(self): """ . """
Wir können leicht alle Münzen in der Liste der Münzen ziehen:
def on_draw(self): """ """ arcade.start_render() self.coin_list.draw() self.player_list.draw()
Verfolgen Sie Sprite-Kollisionen
Mit der Funktion check_for_collision_with_list können Sie feststellen, ob ein Sprite in der Liste auf ein anderes Sprite stößt. Wir verwenden es, um alle Münzen zu sehen, mit denen sich das Sprite des Spielers schneidet. Mit einem einfachen for-Zyklus können Sie die Münze im Spiel loswerden und die Punktzahl erhöhen.
def update(self, delta_time):
Ein vollständiges Beispiel finden Sie in
collect_coins.py .
Spielphysik
Viele Spiele haben Physik in der einen oder anderen Form. Das einfachste ist zum Beispiel, dass Top-Down-Spiele dem Spieler nicht erlauben, durch Wände zu gehen. Plattformer erhöhen die Komplexität der Schwerkraft und der sich bewegenden Plattformen. Einige Spiele verwenden vollwertige physische 2D-Engines mit Massen, Reibung, Federn usw.
Top-Down-Spiele

Für einfache Spiele mit einer Draufsicht benötigt das Arcade-Programm eine Liste von Wänden (oder Ähnlichem), durch die der Spieler nicht gehen kann. Normalerweise nenne ich es wall_list. Anschließend wird im Installationscode der Window-Klasse eine physische Engine erstellt:
self.physics_engine = arcade.PhysicsEngineSimple(self.player_sprite, self.wall_list)
player_sprite erhält einen Bewegungsvektor mit den beiden Attributen change_x und change_y. Ein einfacher Anwendungsfall ist das Bewegen eines Players über die Tastatur.
MOVEMENT_SPEED = 5 def on_key_press(self, key, modifiers): """ """ if key == arcade.key.UP: self.player_sprite.change_y = MOVEMENT_SPEED elif key == arcade.key.DOWN: self.player_sprite.change_y = -MOVEMENT_SPEED elif key == arcade.key.LEFT: self.player_sprite.change_x = -MOVEMENT_SPEED elif key == arcade.key.RIGHT: self.player_sprite.change_x = MOVEMENT_SPEED def on_key_release(self, key, modifiers): """, """ if key == arcade.key.UP or key == arcade.key.DOWN: self.player_sprite.change_y = 0 elif key == arcade.key.LEFT or key == arcade.key.RIGHT: self.player_sprite.change_x = 0
Trotz der Tatsache, dass dieser Code die Geschwindigkeit des Spielers festlegt, bewegt er ihn nicht. Die Aktualisierungsmethode in der Window-Klasse ruft physics_engine.update () auf, wodurch sich der Player bewegt, jedoch nicht durch die Wände.
def update(self, delta_time): """ """ self.physics_engine.update()
Das vollständige Beispiel finden Sie in
sprite_move_walls.py .
Plattformer

Der Wechsel zu einem Plattformspiel mit Seitenansicht ist ganz einfach. Der Programmierer muss die Physik-Engine auf PhysicsEnginePlatformer umstellen und die Gravitationskonstante hinzufügen.
self.physics_engine = arcade.PhysicsEnginePlatformer(self.player_sprite, self.wall_list, gravity_constant=GRAVITY)
Um die Kacheln und Blöcke hinzuzufügen, aus denen das Level bestehen wird, können Sie ein Programm wie
Kacheln verwenden .
Ein Beispiel finden Sie unter
sprite_tiled_map.py.Lernen Sie aus einem Beispiel
Mit gutem Beispiel lernen ist eine der besten Methoden. Die Arcade-Bibliothek enthält eine große Liste von
Beispielprogrammen, auf die Sie sich beim Erstellen eines Spiels konzentrieren können. Diese Beispiele zeigen die Konzepte von Spielen, nach denen meine Online- und Offline-Schüler seit mehreren Jahren gefragt haben.
Das Ausführen von Demos mit installiertem Arcade ist überhaupt nicht schwierig. Zu Beginn des Programms für jedes Beispiel befindet sich ein Kommentar mit dem Befehl, den Sie in die Befehlszeile eingeben müssen, um dieses Beispiel auszuführen. Zum Beispiel:
python -m arcade.examples.sprite_moving_platforms
DAS ENDE
Wie immer warten wir auf Ihre Kommentare und Fragen, die Sie hier hinterlassen oder an einem
Tag der offenen Tür nach
Stas gehen können.