Home › Kategorie 01

🚀 Getting Started mit Python Arcade

BEGINNER ⏱ ~30 Min

Installation

Arcade lässt sich einfach über pip installieren. Du benötigst Python 3.9+ und pip.

ℹ️ Systemanforderungen: Python 3.9+, OpenGL 3.3+ (Windows/Mac/Linux) oder OpenGL ES 3.1+ (Raspberry Pi). Grafikkarte mit aktuellen Treibern empfohlen.
TERMINAL
# Stabile Version installieren
pip install arcade

# Installation prüfen
python -c "import arcade; print(arcade.version.VERSION)"
TERMINAL – Dev-Version
# Neueste Entwicklungsversion von GitHub
pip install git+https://github.com/pythonarcade/arcade.git

# Beispiele starten
python -m arcade.examples.asteroids
TERMINAL – Raspberry Pi
# Für ARM-Geräte: Abhängigkeiten vorher installieren
sudo apt-get install python3-pip libsdl2-dev
pip install arcade

# Hinweis: Nur Raspberry Pi 4/5 mit 64-bit OS werden unterstützt

Erstes Fenster öffnen

Das einfachste Arcade-Programm öffnet ein Fenster und hält es offen. Die Funktion arcade.run() startet den Event Loop.

PYTHON – Minimales Beispiel
import arcade

# Fenstergröße
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
SCREEN_TITLE = "Mein erstes Spiel"

# Fenster öffnen
arcade.open_window(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_TITLE)

# Hintergrundfarbe setzen
arcade.set_background_color(arcade.color.AMAZON)

# Event Loop starten (hält das Programm am Laufen)
arcade.run()
⚠️ arcade.run() ist ein blockierender Aufruf – alles danach wird erst ausgeführt, wenn das Fenster geschlossen wird. Setze deshalb immer alle Einstellungen vor arcade.run().

Die Game-Klasse (empfohlen)

Für echte Spiele erbt man von arcade.Window. Diese Klasse bietet Event-Methoden für Zeichnen, Updates und Eingaben.

PYTHON – Window-Klasse
import arcade

class MyGame(arcade.Window):
    """Hauptklasse des Spiels."""

    def __init__(self):
        # Eltern-Konstruktor aufrufen
        super().__init__(800, 600, "Mein Spiel")
        arcade.set_background_color(arcade.color.DARK_BLUE_GRAY)

    def setup(self):
        """Spielzustand initialisieren. Wird einmal aufgerufen."""
        self.player_x = 400
        self.player_y = 300
        self.score = 0

    def on_draw(self):
        """Jeden Frame aufgerufen – hier zeichnen wir."""
        self.clear()  # Bildschirm leeren
        arcade.draw_circle_filled(
            self.player_x, self.player_y, 20,
            arcade.color.YELLOW
        )

    def on_update(self, delta_time):
        """Spiellogik – ~60x pro Sekunde aufgerufen."""
        pass

    def on_key_press(self, key, modifiers):
        """Tastendruck-Event."""
        if key == arcade.key.ESCAPE:
            arcade.exit()

# Spiel starten
def main():
    game = MyGame()
    game.setup()
    arcade.run()

if __name__ == "__main__":
    main()

__init__()

Fenster-Einstellungen und Grundinitialisierung. Wird genau einmal beim Start aufgerufen.

setup()

Spielzustand initialisieren. Kann mehrfach aufgerufen werden (z.B. beim Neustart).

on_draw()

Jeden Frame zum Zeichnen. Beginne immer mit self.clear().

on_update(dt)

Spiellogik. delta_time = Zeit seit letztem Frame in Sekunden.

Der Game Loop

Arcade's Event Loop ruft deine Methoden automatisch auf. Verstehe den Ablauf, um Spiele richtig zu strukturieren.

▶ LIVE VISUALIZATION – Game Loop

Der Loop durchläuft alle drei Phasen ~60x pro Sekunde

Interaktiver Game Loop – Live Animation

Zeigt alle 3 Phasen des Arcade Game Loops in Echtzeit – ~60 Frames/Sekunde

Methode Wann aufgerufen Typische Aufgabe
on_update(dt)~60x/Sek.Bewegung, KI, Spiellogik
on_fixed_update(dt)Fester TaktPhysik-Updates (deterministisch)
on_draw()Jeden FrameAlles zeichnen
on_key_press(key, mod)Bei TastendruckEingabe verarbeiten
on_key_release(key, mod)Bei LoslassenEingabe stoppen
on_mouse_press(x, y, btn, mod)Maustaste gedrücktKlick-Aktionen
Tipp: Nutze delta_time in on_update() für frame-rate-unabhängige Bewegung: self.x += speed * delta_time statt feste Pixel-Werte.

Empfohlene Projektstruktur

Für größere Projekte empfiehlt sich eine klare Ordnerstruktur:

DATEISTRUKTUR
mein_spiel/
├── main.py              # Einstiegspunkt
├── constants.py         # Konstanten (SCREEN_WIDTH, etc.)
├── views/
│   ├── game_view.py     # Haupt-Spielansicht
│   ├── menu_view.py     # Hauptmenü
│   └── gameover_view.py # Game Over Screen
├── sprites/
│   ├── player.py        # Spieler-Sprite
│   └── enemy.py         # Gegner-Sprites
└── assets/
    ├── images/          # PNG, JPG Bilder
    ├── sounds/          # WAV, OGG Sounds
    └── maps/            # TMX Tilemaps
💡 Arcade hat eingebaute Built-In Resources! Mit dem Präfix :resources: kannst du mitgelieferte Assets nutzen: arcade.load_texture(":resources:images/animated_characters/female_person/femalePerson_idle.png")