Sernenfelder mit 3D Effekt
Ihr wollt ein cooles Sternenfeld? Kein Problem. Vielleicht erinnert Ihr euch noch an die alten Zeiten, wo Sternenfelder in "Assembler" realisiert wurden, um die Geschwindigkeit zu erhöhen. Heutzutage reicht ein 300 Mhz CPU, um ein 3D-Sternenfeld auch mit VB & DirectX zu realisieren. Die Theorie ist einfach, man "schießt" einfach Pixel vom oberen Rand des Bildschirmes zum unteren Rand, dabei besitzt jeder Pixel eine andere Geschwindigkeit. So kommt es uns vor als würde man über ein dreidimensionales Sternenfeld fliegen. Natürlich könnt Ihr auch horizontale Sternenfelder erstellen.... In dem Beispiel beschreibe ich das Verwalten eines veritkalen Sternenfeldes mit drei Prozeduren. Die 1. und 2. Prozedur sind dafür zuständig einen Pixel (eigentlich ist es ja ein Stern) in das Sternenfeld einzutragen, je mit Geschwindigkeit, Farbe und Position. Die 3. Prozedur soll alle Sterne (Pixel *g*) im Sternenfeld auf den Bildschirm bringen und Sterne, die das Feld verlassen, aus dem Sternenenfeld "löschen". Dieses Tutorial setzt vorraus, dass Ihr das "einzelne Pixel setzten" Tutorial gelesen habt.
Um die Sterne zu verwalten, müssen wir ein Array deklarieren welches Informationen zu den einzelnen Sternen sammelt, das müsste in etwa so aussehen:
|
Nun folgt die Prozedur, die in die Hauptschleife des Spieles integriert wird, sie berechnet die Geschwindigkeit, Farbe, Sternendichte und den Bereich in dem die Strene gerzeichnet werden. Die Prozedur "create_star" wird von der Prozedur DrawStars aufgerufen. Sie ist zuständig für die Eintragung im Array.
|
Wie Ihr sehen könnt, wird der Sternenzähler (StarCounter) auf 0 zrückgesetzt, wenn er größer als 1400 ist! D.h., wenn die Sterne, die sich am Anfang des Arrays befinden, noch nicht aus dem Bildschirm verschwunden sind, werden diese einfach von den neuen überschrieben. Sicherlich gibt es Methoden dies zu umgehen, aber der eschwindigkeit zuliebe, lassen wir das lieber.
Zu guter Letzt, die Prozedur die, das ganze Sternenfeld bewegt (in dem Beispiel nach unten). Zu jeder Y Position, wird hierzu die Geschwindigkeit des jeweiligen Pixels addiert. Wenn Ihr vertikale Sternenfelder wollt, müsst Ihr natürlich die Geschwindigkeit zur X Position addieren.
|
Ich empfehle Euch die Prozeduren nach euren Wünschen anzupassen, da diese aus meinem aktuellen Projekt stammen und auch auf dieses angepasst wurden. Falls Ihr euch wundert, warum ich eine create_star Prozedur gemacht habe: Wenn man das Spiel startet müssen erst mal die Sterne in den Bildschirm fliegen. das sieht natürlich etwas seltsam aus. Deswegen solltet Ihr auch eine Prozedur machen, die das Sternenfeld schon vorher mit Sternen füllt. Deswegen create_star!
Ja das müsste es gewesen sein, falls bei Euch etwas nicht funktioniert, mailt mir bitte.
Autor: Alexander Ney / Mehr Tutorials auf www.vb-overkill.de.vu