Making of J-Type: Tag 3

Das Ende des dritten Tages bringt die erste (einigermaßen) spielbare Version. Einigermaßen leider nur deswegen, weil die Kollisionsabfrage bisher absolut nicht zuverlässig funktioniert und auch die Explosionen noch nicht ganz an der richtigen Stelle gerendert werden.

Um die Kollisionsabfrage sowie die Explosionen kümmere ich am morgigen Tag. Heute lag der Focus darin, dem Spielerraumschiff das Schießen beizubringen sowie den bisherigen drei Gegnertypen jeweils ihr individuelles Bewegungsmuster zu verpassen. So fliegen Nightcrawler, Poomla Titan und Viper (benannt nach den Namen ihrer Erschaffer) noch nach relativ einfachen Mustern, aber der Spieler soll ja nicht gleich zu Beginn des Spiels völlig überfordert werden.

Für die Positionierung der Gegner im Level habe ich mir drei verschiedene Möglichkeiten überlegt:

  • Die Gegner sind an festen Stellen im Level montiert und warten dort auf Ihren Einsatz, während die Spielkamera mit dem Spierschiff mitscrollt. Sobald die Kamera in die Reichweite eines Gegners kommt, wird dieser aktiviert und beginnt in seinem typischen Bewegungsmuster auf den Spieler loszufliegen - so weiß ich, dass es zum Beispiel bei Takatis von Poke 53280 gemacht wird.
  • Kamera und Spielerschiff bleiben stehen. Die Gegner beginnen an ihren festen Startpunkten, die weiter vom Spieler entfernt sind desto später sie erscheinen sollen und fliegen von dort aus in ihrem Bewegungsmuster auf den Spieler zu bis sie irgendwann im Bildschirm erscheinen.
  • Kamera und Spielerschiff bleiben stehen und die Zeit seit Beginn des Levels wird gemessen. Das Spiel verwaltet intern eine Liste der zu erscheinenden Gegnertypen, ihrer Startposition und zu welchem Zeitpunkt sie kurz außerhalb der Kamerasichtweite spawnen. Der Eindruck von Bewegung wird durch die im Hintergrund durchlaufenden Sterne simuliert.

Lösung 1 ist ein wenig aufwändiger zu implementieren, da die Kamera bewegt wird und alle Spielobjekte demnach über die Kamerabewegung informiert werden müssten. Lösung 2 hingegen wäre die ungeschickteste von allen, denn sie kostet gewaltig Rechenleistung: Ein Level kann bis zu hunderte Gegner enthalten und für alle diese müsste ihr jeweils gültiges Bewegungsmuster berechnet werden, selbst wenn die Feinde noch gar nicht zu sehen sind.

Ich habe mich also für Lösung 3 entschieden, da sie sehr schnell zu implementieren war und nur für die aktuell auf dem Bildschirm sichtbaren Feinde Berechnungen durchführen muss. Die Feinde werden kurz außerhalb des Bildschirms erschaffen und sobald sie am Spieler links aus dem Sichtbereich heraustreten, werden sie von der Engine "entsorgt" um Platz für neue Gegner zu machen.

Nun ist der erste Teil des Levels fertig und J-Type erwacht langsam zum Leben: Allerlei Gegner stürmen bereits in Formation auf den Spieler zu und dieser kann sich mit seiner ersten einfachen Waffe zur Wehr setzen. Da das aber alles, wie eingangs erwähnt, noch nicht 100%-ig funktioniert, kann ich im Moment leider nur ein paar Bilder zeigen:


Abbildung: Ein Geschwader Vipers im Sturzflug


Abbildung: Ein Konvoy aus Poomla Titans


Abbildung: Eine Staffel Nightcrawler im Formationsflug

Bis morgen! :-)


Making of J-Type: Tag 2

Für den zweiten Tag stand die Bewegung des Spielerschiffs sowie die Kollisionsabfrage und die Explosions-Effekte auf der To-Do-Liste. Leider war dieser Samstag primär von Frustration geprägt, denn einige Sachen, die ich mir vorgestellt hatte, wollten einfach nicht funktionieren.

Eigentlich wollte ich die Bewegungen durch Spieler-Eingabegeräte und CPU auf spezielle Art und Weise kapseln, wie ich es bereits letztes Jahr in meinem Klassenmodell für Jonas und mein "XnaTest"-Spiel getan hatte, doch so richtig funktionieren wollte das nicht: Das Resultat war alles andere als befriedigend, der Spieler ruckelte und sprang fortan mit seinem Raumschiff nur so durchs All. Also habe ich aus Zeitgründen die komplette Steuerung nun erstmal direkt ohne Kapselung implementiert, diese läuft flüssig und man kann sich ab sofort frei im Raum bewegen.

Nächster Punkt: Kollisionsabfrage und Explosionen. Diese Funktionalität hatte ich glücklicherweise bereits in meiner Engine implementiert, so dass ich sie "nur" noch in das Spiel einbauen musste: Doch die Kollisionsabfrage, die auf BoundingSpheres basiert, ist leider zu ungenau, so dass sie stellenweise bereits zu früh anschlägt. Hier werde ich mich wohl nochmal ein wenig über Kollisionsabfragen in 3D Spielen schlau lesen müssen und eventuell manuell BoundingBoxes um die Models legen.

Die Explosionen hingegen ließen sich vergleichsweise schnell einbauen, einziges Problem stellte hier die Umrechnung zwischen zwei verschiedenen Koordinatensystemen dar: Die 3D Modelle arbeiten mit einem Koordinatensystem, welches 0/0 auf die Bildschirmmitte abbildet und den Punkt oben links auf die Koordinaten 12.0f/9.5f, während ich die Explosionen in gewohnten Pixelkoordinaten mit 0/0 oben links und 512/384 mit der Bildschirmmitte (für die Auflösung 1024x768) setzen muss. Für eine Umrechnung war also noch ein wenig Mathematik gefragt.

Um schließlich das angekündigte Minispiel fertigstellen zu können, in dem der Spieler entgegenkommenden Objekten ausweichen muss, plante ich noch zwei verschiedene Asteroiden-Modelle einzubauen, die ich dem Spacewar Starter Kit von XNA entnommen habe. Doch diese lassen sich in meiner Engine nicht ohne weiteres rendern, da Microsoft dort einen speziellen Effekt zur Darstellung seiner Models verwendet. Es ist für mich ein wenig unverständlich, warum Microsoft in seinem Beispiel, das gezielt auf Anfänger abzielt und diesen eigentlich die Grundzüge von Spieleprogrammierung demonstrieren soll, bereits fortgeschrittene Techiken wie Shader verwenden muss.

Also habe ich für heute nun auch auf die Asteroiden verzichtet und lasse stattdessen in bestimmten Zeitabständen gegnerische Raumschiffe erzeugen und diese auf Kollisionskurs mit dem Spieler setzen, das Resultat ist eine (momentan) noch eine bildschirm-füllende Explosion, die ich jedoch für das spätere fertige Spiel noch ein wenig kleiner machen sollte.


Abbildung: Das Spielerraumschiff explodiert nach Kollision mit einem Gegner

Morgen lernen die Raumschiffe dann endlich schießen und damit dürfte die Basisversion der Spielmechanik fertiggestellt sein - wir werden sehen :-)

Bis morgen!


Seiten: << 1 2 ...8 9 10 11 12 ...102 103 >>
-->

Suchen

 

Google
Benutzerdefinierte Suche

Tagwolke