EINSTIEG

Das Zeitbudget

Ein Spiel ist eine Endlosschleife, die in jedem Durchlauf ein neues Bild berechnet. Die Zeit für einen Durchlauf ist knapp, und daraus folgt fast alles in diesem Buch.

Die Spielschleife

letzte = zeit()
while spiel_laeuft:
    jetzt = zeit()
    dt = jetzt - letzte          # vergangene Zeit in Sekunden
    letzte = jetzt

    eingaben_lesen()
    welt_aktualisieren(dt)       # Bewegung, Kollisionen
    bild_zeichnen()

Bei 60 Bildern pro Sekunde dauert ein Durchlauf höchstens 1 s ÷ 60 ≈ 16,7 ms. Schafft das Programm das nicht, ruckelt das Spiel.

Warum dt?

Nicht jeder Rechner schafft gleich viele Bilder. Würde eine Figur pro Bild um einen festen Betrag weiterrücken, wäre sie auf einem schnellen Rechner schneller. Deshalb rechnet man mit der vergangenen Zeit:

x = x + geschwindigkeit * dt     # Weg = Geschwindigkeit · Zeit

Stelle „fester Schritt pro Bild“ ein und verändere die Bildrate: Das Quadrat wird schneller und langsamer. Mit dt bleibt die Geschwindigkeit gleich, nur die Bewegung wird bei niedriger Bildrate ruckeliger.

Wie viel Rechnung passt in ein Bild?

Ein Bildschirm mit 1920 × 1080 Pixeln hat rund 2,07 Millionen Pixel. Bei 60 Bildern pro Sekunde sind das etwa 124 Millionen Pixel pro Sekunde. Ein Prozessorkern schafft grob eine Milliarde einfache Rechenschritte pro Sekunde. Pro Pixel blieben also nur etwa 8 Rechenschritte, und die Spiellogik ist darin noch nicht enthalten.

Daraus folgen zwei Konsequenzen, die sich durch alle Kapitel ziehen:

Merke
Die Spielschleife liest Eingaben, aktualisiert die Welt um den Zeitschritt dt und zeichnet das Bild. Bei 60 Bildern pro Sekunde stehen dafür 16,7 ms zur Verfügung.

Aufgabe: Eine Figur läuft mit 4 m/s. Das Spiel schafft 50 Bilder pro Sekunde. Um wie viel ändert sich ihre Position pro Bild? Was ändert sich bei 25 Bildern pro Sekunde?

Lösung anzeigen

dt = 1 ÷ 50 = 0,02 s, also 4 · 0,02 = 0,08 m pro Bild. Bei 25 Bildern ist dt = 0,04 s und der Schritt 0,16 m. Pro Sekunde bleiben es in beiden Fällen 4 m.