Bewegte Formen programmieren — von der Game-Loop über Transformationen bis zur Event-gesteuerten Interaktion mit dem Canvas-Element.
Informatik · Klasse 12 · 60 Minuten
Modul 01
Animation ist die schnelle Abfolge leicht veränderter Bilder, die für das menschliche Auge den Eindruck von Bewegung erzeugt. In der Informatik steuern wir diesen Prozess algorithmisch — Frame für Frame.
Das Herzstück jeder Animation: ein sich wiederholender Zyklus aus Update → Render.
↓ Details anzeigen
Die Game-Loop (oder Animations-Loop) ruft sich selbst rekursiv auf — in JavaScript mit requestAnimationFrame(). Pro Durchlauf werden Positionen, Geschwindigkeiten und Zustände aktualisiert (Update-Phase), anschließend wird der aktuelle Frame gezeichnet (Render-Phase). Der Browser synchronisiert die Loop mit der Bildschirm-Refreshrate (~60 FPS), was ruckelfreie Animationen ermöglicht. Im Gegensatz zu setInterval() pausiert requestAnimationFrame() automatisch bei inaktiven Tabs — das spart Ressourcen.
60 Bilder pro Sekunde — warum genau diese Zahl?
↓ Details anzeigen
Monitore aktualisieren typischerweise mit 60 Hz — also 60 Mal pro Sekunde. Jeder Frame hat ein Zeitbudget von ca. 16,67 ms. Reicht die Rechenzeit nicht aus, werden Frames übersprungen (Frame-Drop), und die Animation ruckelt. Die Wahrnehmungsschwelle für flüssige Bewegung liegt bei ca. 24 FPS (Kino), aber für interaktive Anwendungen sind 60 FPS der Standard, weil Eingabeverzögerung (Input-Lag) sonst spürbar wird.
Das HTML5-Canvas-Element als programmierbares Zeichenbrett.
↓ Details anzeigen
Das <canvas>-Element stellt eine Pixel-basierte Zeichenfläche bereit. Über den 2D-Rendering-Kontext (getContext('2d')) zeichnen wir Formen, Pfade, Text und Bilder. Wichtig: Canvas hat kein DOM — jedes gezeichnete Objekt muss pro Frame neu gerendert werden (Immediate-Mode-Rendering). Das unterscheidet Canvas von SVG, das ein Retained-Mode-Modell nutzt. Für performante Animationen ist Canvas ideal, da der Zeichenpuffer direkt über die GPU angesteuert werden kann.
Zeitbasierte vs. framebasierte Bewegung — ein kritischer Unterschied.
↓ Details anzeigen
Wenn Geschwindigkeit als x += 5 pro Frame berechnet wird, hängt die Bewegungsrate von der Framerate ab — auf einem langsamen Gerät bewegt sich das Objekt langsamer. Die Lösung: Delta-Time. requestAnimationFrame liefert einen Zeitstempel; die Differenz zum vorherigen Frame (deltaTime) wird als Faktor multipliziert: x += speed * deltaTime. So ist die Bewegung unabhängig von der Framerate — ein Grundprinzip professioneller Game-Engines.
rAF = requestAnimationFrame — ruft die Loop erneut auf
Modul 02
Durch Transformationen (Translate, Rotate, Scale) und Event-Listener machen wir Animationen dynamisch und reaktiv — der Nutzer wird zum Akteur.
Bewege die Maus / tippe auf das Canvas — Partikel folgen deiner Bewegung.
Der 2D-Kontext nutzt eine Transformationsmatrix. Drei Grundoperationen verändern das Koordinatensystem:
Verschiebt den Ursprung des Koordinatensystems.
↓ Details
Statt jedes Objekt relativ zu (0,0) zu positionieren, verschieben wir den Nullpunkt an die gewünschte Stelle. Das vereinfacht Rotation um den Mittelpunkt: erst translate zum Zentrum, dann rotate, dann Zeichnen relativ zu (0,0). Wichtig: save() und restore() sichern und stellen den Transformationszustand wieder her.
Dreht das Koordinatensystem um den aktuellen Ursprung.
↓ Details
Der Winkel wird in Radiant angegeben (Grad × π/180). Ohne vorheriges translate rotiert alles um (0,0) — also die obere linke Ecke. Typisches Muster: translate(cx, cy) → rotate(angle) → zeichnen bei (-w/2, -h/2). So dreht sich das Objekt um seinen eigenen Mittelpunkt.
Skaliert alle nachfolgenden Zeichenoperationen.
↓ Details
Werte > 1 vergrößern, Werte < 1 verkleinern. Negative Werte spiegeln die Achse. scale(1, -1) invertiert die Y-Achse — nützlich, um ein mathematisches Koordinatensystem (Y nach oben) zu simulieren. Achtung: Scale beeinflusst auch Linienstärken!
Modul 03
Teste dein Verständnis der Konzepte durch praktische Übungen.
Bringe die Schritte einer typischen Animation-Loop in die richtige Reihenfolge.
Verändere die Parameter im Editor und beobachte die Auswirkung in Echtzeit. Kannst du die Farbe, Geschwindigkeit und Größe des Kreises ändern?
Modul 04
8 Fragen — teste dein Verständnis von Animation und Interaktion.
Nachschlagewerk
Reflexion
„Moderne Webanwendungen und Spiele nutzen oft GPU-beschleunigtes Rendering. Welche ethischen und ökologischen Implikationen hat es, wenn aufwendige Animationen und Partikeleffekte zum Standard in Web-Design werden — insbesondere im Hinblick auf Barrierefreiheit (prefers-reduced-motion) und Energieverbrauch?"
„Canvas vs. SVG: In welchen Szenarien ist ein Retained-Mode-Ansatz (SVG/DOM) dem Immediate-Mode (Canvas) überlegen — und umgekehrt? Diskutiert anhand konkreter Anwendungsfälle."