Computer Graphics TU Braunschweig |
Während der Entwicklung des Canyonshooter stellte sich heraus, dass eine Konsole benötigt wurde. Unter einer Konsole versteht man einen Bereich innerhalb des Spiels, in den der Benutzer Kommandos eingeben kann, die dann entsprechend verarbeitet werden und gegebenenfalls eine Ausgabe produzieren.
Über die Konsole ist es durch das Ausführen von Kommandos möglich, beliebige Methoden innerhalb des Canyonshooter auszuführen und Variablen-Werte zu verändern. Gäbe es diese Möglichkeit nicht, so müsste der Programmierer das Programm für jeder Änderung zunächst beenden, die nötige Änderung im Quelltext vornehmen und das Programm danach erneut ausführen.
Besonders pratkisch ist diese Funktionalität beim Balancing. Unter Balancing versteht man das Konfigurieren des Spiels in der Hinsicht, dass der Spielspaß des Spieler durch das Herausfinden der richtige Schwierigkeitsstufe maximiert wird. Der Spieler soll sich nicht langweilen, weil er Gegner zu leicht besiegen kann und soll auch nicht frustiert werden, weil er diese nie besiegen kann. Das richtige Mittelmaß zu finden, ist Aufgabe des Balancing. Dank der Konsole ist der Entwickler nun in der Lage, beliebige Werte zu verändern, während er sich im Spiel befindet. So kann z. B. die Spielgeschwindigkeit einfach erhöht oder verringert werden, ohne das Programm beenden und die Änderung im Quelltext vornehmen zu müssen.
Die Schwierigkeit bei der Entwicklung der Konsole bestand darin, das Einbinden beliebiger Funktionen und Variablen so komfortabel wie möglich zu gestalten. Die Eingabe der Kommandos in die Konsole findet in Textform statt. Das Kommando "Renderer.DrawCollisionShapes" beispielsweise, hat zur Folge, dass eine Methode aufgerufen wird, die das Zeichnen von Kollisions-Boxen zur Folge hat. Kollisions-Boxen sind dreidimensionale Körper innerhalb des Spiels, die zur Feststellung von Kollisionen zweier Objekte benötigt werden. Da die Objekte, z. B. ein Raumschiff, in ihrer Form sehr komplex sind, umgibt man sie mit einer oder mehreren Kollisions-Boxen. Im Folgenden muss dann nicht mehr das komplexe Modell des Raumschiffs auf Kollisionen mit anderen meist ebenfalls komplexen Objekten geprüft werden, was sehr rechenintensiv ist, sondern es werden nur Kollisionen der Kollisions-Boxen untereinander geprüft, was dem Computer eine Menge Rechenarbeit erspart.
Die Konsole muss nun dafür sorgen, dass das Kommando korrekt interpretiert und die gewünschte Funktion auch tatsächlich aufgerufen wird. Dies geschieht so, dass das Kommando zunächst aufgeteilt wird. Wie man bereits erkennen kann, besteht das Kommando "Renderer.DrawCollisionShapes" aus zwei Teilen. Die Methode "DrawCollisionShapes" ist Teil des Renderers und wird deshalb in dieser Form aufgerufen. Die Kommandos sind also hierarchisch organisiert. Der Renderer könnte auch eine Menge weiterer Methoden zur Ausführung bereitstellen, die dann über Kommandos wie "Renderer.EineWeitereMethode" aufgerufen werden würden.
Damit Methoden und Variablen innerhalb der Konsole überhaupt benutzt werden können, müssen sie zunächst in der Konsole registriert werden. Dies geschieht durch den Aufruf eines einfachen Befehls inerhalb des Quelltexts. Dabei findet die Zuordnung des Befehls mit der Methode statt. Die Registrierung der Methode "DrawCollisionShapes" z. B. ordnet diese dem Renderer zu. Die Zuordnung ist im Prinzip willkürlich und ist nur vorgesehen, damit die vielen Kommandos einigermaß übersichtliche geordnet werden können. Weiterhin wird bei der Registrierung der Zusammenhang zu der Methode innerhalb des Quelltexts hergestellt, denn die Konsole muss wissen, welche der vielen Methoden des gesamten Canyonshooters sie bei dem speziellen Befehl "Renderer.DrawCollisionShapes" aufrufen soll.
Dank der Reflection-Technologie des Microsoft .NET Frameworks ist es möglich, Methoden anhand ihres Namens zu identifizieren. Dies war in der Programmierung bisher nicht selbstverständlich. Denn die Bezeichnung einer Methode, die der Entwickler beliebig und nur zur besseren Verständlichkeit des Quelltexts sinnvoll aber dennoch frei gewählt hat, ist für die Ausführung des Programms völlig irrelevant. Den Computer interessiert nicht, ob der Entwickler eine Methode "DrawCollisionShapes" oder "A938Gslewiuvkh" genannt hat.
Durch die Reflection-Technologie werden genau diese Meta-Daten, wie der Name einer Methode, zusätzlich gespeichert und können zur Laufzeit des Programms genutzt werden. Das Vorhandensein dieser Informationen und deren Nutzbarkeit wiederum ermöglichen es der Konsole, relativ einfach auf die Methode zuzugreifen. Wäre dieser einfache Zugriff nicht möglich, so hätte der Entwickler zu jeder einzelnen Methode oder Variable, die er in der Konsole nutzen möchte, zusätzlichen Quelltext schreiben müssen.
Dank der Reflection-Technologie muss der Programmierer also während der Entwicklung seines Quelltexts keine Rücksicht auf das Vorhandensein der Konsole nehmen. Er muss keine speziellen Regeln befolgen, damit seine Methoden und Variablen von der Konsole nutzbar sind, was bei der Entwicklung ein sehr großer Vorteil ist.
Die Implementierte Konsole umfasst zwei Teilkonsolen. Die Debug-Konsole ist für Entwicklungszwecke gedacht und im Spiel ersteinmal garnicht sichtbar. Per "^"-Taste kann man die Debug-Konsole aufrufen um Informationen abzurufen oder Daten im Spiel zu verändern. Die Darstellung der Konsole umfasst eine "History" (ähnlich DOS), die mit BILD-AUF und BILD-AB durchlaufen werden kann und eine Eingabezeile, in der man den gerade eingetippten Befehl, sowie einige auswählbare Vorschläge zur vervollständigung des Befehls bekommt. Zusätzlich kann jeder Teil des gesammten Spieles auf die Debug-Konsole zugreifen um umfangreiche Informationen über Fehler oder andere Informationen verfügbar zu machen. Die Ingame-Konsole ist für Informationen gedacht, die dem Spieler unmittelbar zur Verfügung gestellt werden soll. Die Ingame-Konsole befindet sich am oberen linken Teil des Bildschirms und umfasst nur einige Zeilen. In diesen Zeilen können (von jedem Teil des Spieles) Information ausgegeben werden wie etwa Schadensmeldungen, aufgesammelte Gegenstände oder drohende Gefahren.
TU Braunschweig
- Fakultät für Mathematik und Informatik
- Computer Graphics - Teamprojekt Canyonshooter