Die Blogs der ATE-Experten

Ein Computerspiel entsteht 4: Jelly und die Welt der Spieleentwicklung

25. Juni 2012 von Bastian Moldenhauer

Am Anfang war das Nichts. Naja nicht ganz, zumindest eine Idee oder ein Konzept für ein Spiel war vorhanden. Dies Umfasste am Anfang bei Jellyfish – Tentacle Debacle wenige Konzeptgrafiken und ist nun im Laufe des Projekts auf über 15 Seiten Text angewachsen. Am Anfang standen wir mal wieder vor der Frage: Wo also nun Anfangen ein  Spiel zu entwickeln? Wir haben uns zu Anfang überlegt welche Technologie wir für unser Spiel verwenden wollen und haben uns für die neue Windows Runtime (WinRT) entschieden, da wir uns mit dieser Technologie vertraut machen wollten.

Die wohl bekannteste Komponente, die in jedem Spiel vorhanden ist, ist die GameLoop und auf Grund dessen stelle ich hier deren Funktion vor und wie man Sie gestalten kann. In weiteren Blogposts erfahrt ihr dann Einzelheiten über die einzelnen Abschnitte.

Die GameLoop arbeitet die wesentlichen Elemente des Spiels wie Input, AI, Kollision, Sound etc. ab, aktualisiert die Welt entsprechend und Synchronisiert die Framerate.  Dies wird wiederholt solange das Spiel läuft und durch die wiederholte Veränderung  während jeder Schleifeniteration wirkt die Welt und letztlich das Spiel lebendig, ähnlich einem Daumenkino.

Zu den einzelnen Komponenten:

AI

Hier wird die gesamte Steuerungslogik der Figuren und der Welt Abgearbeitet. Für Jelly, unseren Helden, bedeutet dies, dass er auf die Eingaben des Benutzers reagieren muss, das Plankton schwimmt ggf. in eine Richtung oder entscheidet sich vielleicht einfach dazu sich in der Strömung treiben zu lassen, während die Fische weiter fleißig ihre Bahnen schwimmen.

Physik

Physikalische Berechnung, welche die AI der Figuren berücksichtig und entsprechende Bewegungen umsetzt. Dies erlaubt es Plankton sich treiben zu lassen, Jelly vor seinen Feinden wegzuschwimmen,  aber leider auch seinen Feinden Jelly hinterher zu schwimmen. Entscheidende Größen hierfür sind also Position ( x, y ), Geschwindigkeit ( v ) und Beschleunigung ( a ) und es werden einzelne Zeitschritte berechnet. Die Berechnung erfolgt mittels eines Gleichungslösers (siehe z.B. http://de.wikipedia.org/wiki/Newton-Verfahren bzw. http://de.wikipedia.org/wiki/Runge-Kutta-Verfahren).

Kollision

Da sich alles in der Welt durch die AI und die Physik bewegt. kann und kommt es zu Kollisionen zwischen verschiedenen Objekten in der Spielewelt. Dabei Unterteilt sich Kollision in zwei Teile. Zuerst müssen alle Kollisionen erkannt  werden (Kollisionserkennung) und sind die Kollisionen bekannt, müssen diese aufgelöst werden (Kollisionsauflösung). Wie die Auflösung dabei genau aussieht, hängt davon ab welche Objekte miteinander kollidiert sind und welche Reaktion dabei gewünscht wird. Kollidiert Jelly z.B. mit dem Riff verletzt er sich und wird zurückgeschleudert, kollidiert er mit einem Plankton, wird das Plankton gefressen.

Display

Um die bisherigen Änderungen (vornehmlich Position und Orientierung) sichtbar zu machen, werden diese an das Grafiksystem übermittelt und von diesem gerendert. Auf welche Art dies geschieht hängt von der verwendeten Technologie ab. Da Jellyfish WinRT verwendet, wird Bewegung durch das Verschieben und Drehen unterschiedlicher XAML-Images realisiert. Durch die hohe Wiederholungsrate der Physik und der Aktualisierung der Scene entstehen dadurch bewegte Bilder und Jellyfish – Tentacle Debacle wird zum Leben erweckt.

Sound

Kein Spiel funktioniert ohne Sound, diese gilt auch für Jellyfish – Tentacle Debacle.  Auf Grund von technischen Gegebenheiten wird der Sound nicht unmittelbar bei einem Ereignis abgespielt sondern leicht Zeitversetzt dies  geschieht dennoch innerhalbe derselben GameLoop-Iteration, in der das Ereignis aufgetreten ist. Um dabei ein besseres Raumgefühl zu erreichen wird die Position des Sounds innerhalb der Welt berücksichtig und das Fading/Balancing des Sounds entsprechend angepasst. Auf diese Weise kann der Spieler bestimmen woher der Sound kommt.

Synchronisierung

Dies ist der letzte Schritt bei einer Schleifeniteration und stellt sicher, das sich das Spiel auf diversen Maschinen gleich verhält und gleich steuert. Wunderbare Gegenbeispiele sind alte Dos-Spiele, in denen dies nicht gemacht wurde und jeder Versuch diese Spiele auf moderner Hardware zu spielen daran scheitert, dass alles über den Bildschirm huscht und der Game Over Screen sofort zu sehen ist. Um  dies zu vermeiden wird eine bestimmte Framerate festgelegt. Ist eine Schleifeniteration schneller beendet als die vorgesehene Framerate, wird der Hauptthread durch eine Verzögerung mit der gewünschten Framerate synchron gehalten.

Und sonst so?

Eine GameLoop ist jedoch noch kein vollständiges Spiel. Denn ein Spiel braucht auch ein Intro, Menü, Pause, Highscores etc. Wobei diese auch untereinander verknüpft werden müssen um ein vollständiges Spiel zu erhalten.

In weiteren Blogposts werde ich weiter darauf eingehen welche Elemente noch benötigt werden und eine detailliertere Beschreibung zu den einzelnen Komponenten der GameLoop liefern.

Happy Jellying!

Share it:

Einen Kommentar abgeben (Sie müssen dazu registriert und angemeldet sein!)

Bitte beachte: Die Kommentare werden moderiert. Dies kann zu Verzögerungen bei Deinem Kommentar führen. Es besteht kein Grund den Kommentar erneut abzuschicken.