Dies ist eine alte Version des Dokuments!
Ein erstes Arcade Programm
Nachdem man die Arcade-Bibliothek eingebunden hat (mittels import Arcade) kann man die Objekte und Funktionen verwenden, die uns dadurch zur Verfügung gestellt werden.
Zentral dabei sind vor allem die folgenden Funktionen:
import arcade # Fenster erstellen (Breite, Höhe, Titel) arcade.open_window(600, 600, "Basic Game") # Hintergrundfarbe arcade.set_background_color(arcade.color.WHITE) # Damit das Fenster gerendert und gezeichnet wird, muss man start_render aufrufen arcade.start_render() # Ein Smiley zeichnen arcade.draw_circle_filled(300, 300, 200, arcade.color.YELLOW) arcade.draw_circle_filled(370, 350, 20, arcade.color.BLACK) arcade.draw_circle_filled(230, 350, 20, arcade.color.BLACK) arcade.draw_arc_outline(300, 280, 120, 100, arcade.color.BLACK, 190, 350, 10) # rendern beenden und anzeigen arcade.finish_render() # Nun wird der Game-Loop gestartet, da sonst das Fenster nur ganz kurz sichtbar ist arcade.run()
Mit dem oben verwendeten Prinzip könnte man Grafiken in einem Fenster erstellen - dafür gibt es in Arcade auch etliche Funktionen (siehe https://api.arcade.academy/en/latest/api/drawing_primitives.html für die Zusammenstellung aller Zeichenfunktionen. Doch für ein echtes Spiel benötigen wir weitere Dinge:
- Das Spiel soll mit x FPS (Frames pro Sekunde) immer neu gezeichnet werden (Game-Loop)
- Im Spiel sollen verschiedene Akteure (Spieler, Gegner etc.) vorhanden sein (Sprites)
- Das Spiel soll Events erkennen und darauf reagieren (Tastatureingaben, Mausbewegungen etc.)
Um diese Funktionalitäten zu erreichen, erstellt man eine neue Klasse (z.B, myGame), die von der Klasse Arcade.Window abgeleitet wird und daher all ihre Methoden und Eigenschaften erbt. Im Konstruktor dieser Klasse (init) wird mit super der Konstruktor der Elternklasse Arcade.Window aufgerufen, welche das Fenster erstellt.
In der neuen Klasse MyGame werden einige Standard-Methoden definiert, die für das Funktionieren des Spiels zentral sind:
| Befehl | Beispielbefehl/Erklärung |
|---|---|
init | Der Konstruktor, er wird aufgerufen, wenn ein Objekt erstellt wird. Hier sollte der Konstruktor der Elternklasse aufgerufen werden mit super() |
setup | setup ist sehr ähnlich wie der Konstruktor - hier werden die grundlegenden Dinge erledigt, wenn ein Spiel beginnt. Der Grund, warum man zum Konstruktor noch eine setup-Methode hinzufügt, ist, dass man z.B. nach dem Ende eines Spiels ein neues Spiel mit setup starten kann. |
on_draw | Jedes Mal, wenn das Spielfenster neu gezeichnet wird, wird diese Funktion aufgerufen |
on_update | Jedes Mal, wenn der Spielzustand sich verändert, wird on_update aufgerufen |
import arcade
class MyGame(arcade.Window):
def __init__(self, width, height, title):
# Konstruktor der Elternklasse aufrufen
super().__init__(width, height, title)
# Hintergrundfarbe setzen
arcade.set_background_color(arcade.color.AMAZON)
def setup(self):
# die x-Koordinate speichern als Objektvariable
self.xValue = 0
def on_draw(self):
# Alles löschen
self.clear()
# Alles neu zeichnen.
arcade.draw_circle_filled(self.xValue, 350, 20, arcade.color.BLACK)
def on_update(self, delta_time):
# x-Wert vergrössern
self.xValue = self.xValue + 5
def main():
# Das Objekt der Klasse MyGame erstellen
window = MyGame(800, 600, "Simple Example")
window.setup() # setup aufrufen
arcade.run() # Game-Loop starten
# Nur falls diese Datei direkt über Python aufgerufen wird, main() starten
if __name__ == "__main__":
main()