Struktur & Kernfunktionen

Jede Arcade-App folgt einem strengen Lebenszyklus. Wer diesen versteht, kann jedes Spiel bauen.

Setup

__init__

Einmaliger Aufruf. Hier definierst du Fenstergröße, Titel und lädst alle Bilder (Assets).

Input

on_key_press

Reagiert sofort auf Tasten. Perfekt zum Inkrementieren von Variablen oder für Sprünge.

Graphic

on_draw

Wird ca. 60x pro Sekunde aufgerufen. Hier darf NUR gezeichnet werden (clear, draw_text, etc.).

📝 Test 1: Funktions-Zuordnung

Wo stelle ich Fensterhöhe und Breite ein?
Wo stoppe ich das Programm bei einem Wert?
Wo zeichne ich einen einfachen Kreis?
Wo setze ich beim Loslassen eine Variable auf 0?

Sprites & Geschwindigkeiten

Ein Sprite ist mehr als ein Bild. Es hat Positionen (x, y) und Geschwindigkeiten (change_x, change_y).

Koordinatensystem

  • +X: Nach Rechts bewegen
  • -X: Nach Links bewegen
  • +Y: Nach Oben bewegen
  • -Y: Nach Unten bewegen
Y-Achse
X-Achse

📝 Test 2: Vektoren & Frames

figur = arcade.Sprite("avatar.png", 0.8)
figur.center_x = 120
figur.center_y = 120
figur.change_y = -2

Aufgabe: Nach wie vielen Frames erreicht "figur" die Y-Position 80?

(Tipp: Strecke / Geschwindigkeit)
Bewegung nach OBEN (1 Pixel):
change_y =
Bewegung nach LINKS (5 Pixel):
change_x =

Kollision & Punktesystem

Ein Spiel wird erst durch Interaktion lebendig. Wir prüfen Berührungen und ändern daraufhin den Spielzustand.

# Die Formel für alles:
if arcade.check_for_collision(spieler, gegenstand):
    gegenstand.kill() # Entfernt das Sprite aus allen Listen
    score += 5 # Erhöht die Punkte

📝 Test 3: Teleporter & Sammler

# Spieler startet bei (800, 50)

self.spieler.center_x =

self.spieler.center_y =


# Wenn Teleporter bei (230, 170) berührt wird:

if arcade.(self.spieler, self.teleporter):

# Zurück zum Start teleportieren:

self.spieler.position = ()

Zeit & Game Loops

Verstehe den Unterschied zwischen FPS-abhängigem Rendern und konstanten Physik-Updates.

Zeitstrahl-Simulator

Live Simulation
800ms
on_draw (Frames)Kann bei Lag ausfallen
on_fixed_update (Physik)Wird nachgeholt!

📝 Test 4: Countdown-Logik

Implementiere einen Countdown, der bei 100 startet und bei 0 "Zeit abgelaufen" zeigt.

def __init__(self):
    self.zeit =

def on_update(self, delta_time):
    self.zeit delta_time

def on_draw(self):
    if self.zeit 0:
        arcade.draw_text("Zeit abgelaufen", 400, 300)

UI & High Performance

Lerne, wie du hunderte Texte anzeigst, ohne dass dein Spiel ruckelt.

Schlechte Performance

arcade.draw_text() in jedem Frame neu zu berechnen, kostet viel CPU-Zeit.

def on_draw(self):
  arcade.draw_text("Score: 10", 10, 10)

Profi Performance

Erstelle ein arcade.Text Objekt in __init__. Es wird nur einmal gerendert!

# In __init__:
self.t = arcade.Text("Score", 10, 10)
# In on_draw:
self.t.draw()

📝 Test 5: Effizienz-Check

Stell dir vor, das Spiel läuft 10 Minuten (60 FPS). Wie oft wird der Text in Situation A (draw_text) erstellt?

(Tipp: 60 FPS * 60 Sek * 10 Min)

Wie oft wird der Text in Situation B (Text-Objekt) erstellt?