🚀 Getting Started mit Python Arcade
Installation
Arcade lässt sich einfach über pip installieren. Du benötigst Python 3.9+ und pip.
# Stabile Version installieren
pip install arcade
# Installation prüfen
python -c "import arcade; print(arcade.version.VERSION)"
# Neueste Entwicklungsversion von GitHub
pip install git+https://github.com/pythonarcade/arcade.git
# Beispiele starten
python -m arcade.examples.asteroids
# 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.
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().
Die Game-Klasse (empfohlen)
Für echte Spiele erbt man von arcade.Window. Diese Klasse bietet Event-Methoden für Zeichnen, Updates und Eingaben.
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.
Der Loop durchläuft alle drei Phasen ~60x pro Sekunde
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 Takt | Physik-Updates (deterministisch) |
| on_draw() | Jeden Frame | Alles zeichnen |
| on_key_press(key, mod) | Bei Tastendruck | Eingabe verarbeiten |
| on_key_release(key, mod) | Bei Loslassen | Eingabe stoppen |
| on_mouse_press(x, y, btn, mod) | Maustaste gedrückt | Klick-Aktionen |
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:
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
:resources: kannst du mitgelieferte Assets nutzen: arcade.load_texture(":resources:images/animated_characters/female_person/femalePerson_idle.png")