Game Loop & Update Method Robert Nystrom – Game Programming Patterns Universität zu Köln...
-
Upload
clemens-albrecht -
Category
Documents
-
view
224 -
download
3
Transcript of Game Loop & Update Method Robert Nystrom – Game Programming Patterns Universität zu Köln...
![Page 1: Game Loop & Update Method Robert Nystrom – Game Programming Patterns Universität zu Köln Historisch-Kulturwissenschaftliche Informationsverarbeitung SS.](https://reader036.fdocuments.net/reader036/viewer/2022081604/570491ca1a28ab14218dd97e/html5/thumbnails/1.jpg)
Game Loop & Update Game Loop & Update MethodMethod
Robert Nystrom – Game Programming Patterns
Universität zu KölnHistorisch-Kulturwissenschaftliche InformationsverarbeitungSS 2015Softwaretechnologie II (Teil 2): Simulation und 3D ProgrammierungReferent: Lukas Kley
![Page 2: Game Loop & Update Method Robert Nystrom – Game Programming Patterns Universität zu Köln Historisch-Kulturwissenschaftliche Informationsverarbeitung SS.](https://reader036.fdocuments.net/reader036/viewer/2022081604/570491ca1a28ab14218dd97e/html5/thumbnails/2.jpg)
GliederungGliederungDas Game Loop-Pattern
◦Entstehung◦Umgang mit der Zeit◦Fragestellungen
Das Update-Pattern◦Update-Methoden◦Hinzufügen/Entfernen von Objekten◦Beispielhafte Implementation des
Patterns
![Page 3: Game Loop & Update Method Robert Nystrom – Game Programming Patterns Universität zu Köln Historisch-Kulturwissenschaftliche Informationsverarbeitung SS.](https://reader036.fdocuments.net/reader036/viewer/2022081604/570491ca1a28ab14218dd97e/html5/thumbnails/3.jpg)
Entstehung von Game Entstehung von Game LoopsLoopsFrüher: batch mode programs Bedarf nach Feedback (Bug-
Suche etc.) erste interaktive Programme
(z.B. textbasierte Games)Einfache Event-Loops:
![Page 4: Game Loop & Update Method Robert Nystrom – Game Programming Patterns Universität zu Köln Historisch-Kulturwissenschaftliche Informationsverarbeitung SS.](https://reader036.fdocuments.net/reader036/viewer/2022081604/570491ca1a28ab14218dd97e/html5/thumbnails/4.jpg)
Echter Game-Loop (Basis):
Durchlaufzeit für einen Durchgang bestimmt die Frame-Rate
Durchlaufzeit abhängig vom Arbeitsaufwand und Hardware=> sorgt für Probleme auf verschiedenen PCs
Game-Loop muss für konstante Geschw. sorgen
![Page 5: Game Loop & Update Method Robert Nystrom – Game Programming Patterns Universität zu Köln Historisch-Kulturwissenschaftliche Informationsverarbeitung SS.](https://reader036.fdocuments.net/reader036/viewer/2022081604/570491ca1a28ab14218dd97e/html5/thumbnails/5.jpg)
Das Game Loop-PatternDas Game Loop-PatternLäuft konstantVerarbeitet User-Input, ohne ihn
zu blocken oder darauf zu wartenAktualisiert den SpielstatusRendertKontrolliert die Game-
Geschwindigkeit
=> Wichtiger Teil jedes Spieles
![Page 6: Game Loop & Update Method Robert Nystrom – Game Programming Patterns Universität zu Köln Historisch-Kulturwissenschaftliche Informationsverarbeitung SS.](https://reader036.fdocuments.net/reader036/viewer/2022081604/570491ca1a28ab14218dd97e/html5/thumbnails/6.jpg)
1. Version: Fixe Zeit pro 1. Version: Fixe Zeit pro FrameFrame
• Hilft gegen zu schnelle Verarbeitung, aber nicht gegen zu langsame
![Page 7: Game Loop & Update Method Robert Nystrom – Game Programming Patterns Universität zu Köln Historisch-Kulturwissenschaftliche Informationsverarbeitung SS.](https://reader036.fdocuments.net/reader036/viewer/2022081604/570491ca1a28ab14218dd97e/html5/thumbnails/7.jpg)
2. Version: Variable Zeit pro 2. Version: Variable Zeit pro Frame Frame
• Aber: Rundungsfehler bei Kommazahlen sorgen bei unterschiedlicher Anzahl an Berechnungen für Ungenauigkeiten
![Page 8: Game Loop & Update Method Robert Nystrom – Game Programming Patterns Universität zu Köln Historisch-Kulturwissenschaftliche Informationsverarbeitung SS.](https://reader036.fdocuments.net/reader036/viewer/2022081604/570491ca1a28ab14218dd97e/html5/thumbnails/8.jpg)
3. Version: Flexibel 3. Version: Flexibel rendernrendern
![Page 9: Game Loop & Update Method Robert Nystrom – Game Programming Patterns Universität zu Köln Historisch-Kulturwissenschaftliche Informationsverarbeitung SS.](https://reader036.fdocuments.net/reader036/viewer/2022081604/570491ca1a28ab14218dd97e/html5/thumbnails/9.jpg)
• render(lag / MS_PER_UPDATE); zur Eliminierung von ruckartigen Bewegungen
![Page 10: Game Loop & Update Method Robert Nystrom – Game Programming Patterns Universität zu Köln Historisch-Kulturwissenschaftliche Informationsverarbeitung SS.](https://reader036.fdocuments.net/reader036/viewer/2022081604/570491ca1a28ab14218dd97e/html5/thumbnails/10.jpg)
FragestellungenFragestellungenLoop der Plattform/Game-Engine
verwenden oder selbst schreiben?
FPS-Limit zur Stromeinsparung?Welche Vorgehensweise zur
Kontrolle der Gameplay-Geschwindigkeit?
![Page 11: Game Loop & Update Method Robert Nystrom – Game Programming Patterns Universität zu Köln Historisch-Kulturwissenschaftliche Informationsverarbeitung SS.](https://reader036.fdocuments.net/reader036/viewer/2022081604/570491ca1a28ab14218dd97e/html5/thumbnails/11.jpg)
Update MethodsUpdate Methods“Simulate a collection of
independent objects by telling each to process one frame of behavior at a time.”
=> Simulationsschritte müssen in den Game Loop integriert werden
![Page 12: Game Loop & Update Method Robert Nystrom – Game Programming Patterns Universität zu Köln Historisch-Kulturwissenschaftliche Informationsverarbeitung SS.](https://reader036.fdocuments.net/reader036/viewer/2022081604/570491ca1a28ab14218dd97e/html5/thumbnails/12.jpg)
Nicht in den Loop integriert:
![Page 13: Game Loop & Update Method Robert Nystrom – Game Programming Patterns Universität zu Köln Historisch-Kulturwissenschaftliche Informationsverarbeitung SS.](https://reader036.fdocuments.net/reader036/viewer/2022081604/570491ca1a28ab14218dd97e/html5/thumbnails/13.jpg)
Eingebettet in den Game Loop:
![Page 14: Game Loop & Update Method Robert Nystrom – Game Programming Patterns Universität zu Köln Historisch-Kulturwissenschaftliche Informationsverarbeitung SS.](https://reader036.fdocuments.net/reader036/viewer/2022081604/570491ca1a28ab14218dd97e/html5/thumbnails/14.jpg)
Das Update-PatternDas Update-PatternJede Entität sollte mitsamt ihrem
Verhalten eingekapselt seinDer Game Loop enthält nur die
Kollektion an Objekten und ruft pro Frame einmal die update()-Methode jedes Objektes auf
=> Erleichtert das Addieren und Löschen von Objekten
![Page 15: Game Loop & Update Method Robert Nystrom – Game Programming Patterns Universität zu Köln Historisch-Kulturwissenschaftliche Informationsverarbeitung SS.](https://reader036.fdocuments.net/reader036/viewer/2022081604/570491ca1a28ab14218dd97e/html5/thumbnails/15.jpg)
Dieses Pattern ist gut geeignet wenn◦Das Spiel viele verschiedene Objekte
enthält◦Die Objekte voneinander unabhängig
sind◦Die Objekte im Verlauf der Spielzeit
simuliert werden müssen (sich bewegen/verändern)
![Page 16: Game Loop & Update Method Robert Nystrom – Game Programming Patterns Universität zu Köln Historisch-Kulturwissenschaftliche Informationsverarbeitung SS.](https://reader036.fdocuments.net/reader036/viewer/2022081604/570491ca1a28ab14218dd97e/html5/thumbnails/16.jpg)
Code wird durch Auslagerung in den Game Loop etwas komplexer
Durch die Frame-by-Frame Vorgehensweise müssen Objekt-Zustände zwischengespeichert werden (s. bool patrollingLeft)
Die update()-Reihenfolge ist entscheidend
![Page 17: Game Loop & Update Method Robert Nystrom – Game Programming Patterns Universität zu Köln Historisch-Kulturwissenschaftliche Informationsverarbeitung SS.](https://reader036.fdocuments.net/reader036/viewer/2022081604/570491ca1a28ab14218dd97e/html5/thumbnails/17.jpg)
Hinzufügen von Objekten während des Updatens ist problematisch
![Page 18: Game Loop & Update Method Robert Nystrom – Game Programming Patterns Universität zu Köln Historisch-Kulturwissenschaftliche Informationsverarbeitung SS.](https://reader036.fdocuments.net/reader036/viewer/2022081604/570491ca1a28ab14218dd97e/html5/thumbnails/18.jpg)
Problem beim Entfernen von Objekten:
Objekt als tot markieren, in der Liste belassen und in einem zweiten Durchgang entfernen
![Page 19: Game Loop & Update Method Robert Nystrom – Game Programming Patterns Universität zu Köln Historisch-Kulturwissenschaftliche Informationsverarbeitung SS.](https://reader036.fdocuments.net/reader036/viewer/2022081604/570491ca1a28ab14218dd97e/html5/thumbnails/19.jpg)
Anwendung des PatternsAnwendung des PatternsSkelett-Klasse:
![Page 20: Game Loop & Update Method Robert Nystrom – Game Programming Patterns Universität zu Köln Historisch-Kulturwissenschaftliche Informationsverarbeitung SS.](https://reader036.fdocuments.net/reader036/viewer/2022081604/570491ca1a28ab14218dd97e/html5/thumbnails/20.jpg)
Spielwelt als Klasse:
![Page 21: Game Loop & Update Method Robert Nystrom – Game Programming Patterns Universität zu Köln Historisch-Kulturwissenschaftliche Informationsverarbeitung SS.](https://reader036.fdocuments.net/reader036/viewer/2022081604/570491ca1a28ab14218dd97e/html5/thumbnails/21.jpg)
Implementation des Patterns:
![Page 22: Game Loop & Update Method Robert Nystrom – Game Programming Patterns Universität zu Köln Historisch-Kulturwissenschaftliche Informationsverarbeitung SS.](https://reader036.fdocuments.net/reader036/viewer/2022081604/570491ca1a28ab14218dd97e/html5/thumbnails/22.jpg)
Umgang mit inaktiven Umgang mit inaktiven ObjektenObjektenBei jedem Frame die update()-
Methode von Objekten aufzurufen, bei denen sich nichts ändert, ist ineffektiv
Möglicher Lösungsweg: Separate Kollektion, die nur die aktiven Objekte enthält, erstellen
![Page 23: Game Loop & Update Method Robert Nystrom – Game Programming Patterns Universität zu Köln Historisch-Kulturwissenschaftliche Informationsverarbeitung SS.](https://reader036.fdocuments.net/reader036/viewer/2022081604/570491ca1a28ab14218dd97e/html5/thumbnails/23.jpg)
Vielen Dank für die Vielen Dank für die Aufmerksamkeit!Aufmerksamkeit!