2D Spiel - 'Boden-Erkennung'
-
Hallo zusammen,
ich bin grade drann ein kleines Jump&Run Game zu coden. Folgende Frage:
Wie kann ich erkennen ob meine Figur auf einem 'festen' Untergrund steht?
Ich hab eine Map geladen und habe da jetzt z.B. eine Kiste wo ich draufspringen will.
Hinzu kommt noch das diese Kiste eventuell zerstört werden könnte.
Da meine Figur sich auch durch das Umfeld buddeln kann (á la Worms), verändert sich also ständig die Map.Ich hab mir überlegt das ich alle Pixel die fest sind, in einer Variablen speichern könnte. Aber das wäre bei einer großen Map ein großer Aufwand.
Sprites hab ich mir auch überlegt, aber für jede Textur ein Sprite erstellen ist doch auch zu viel, oder?
-
Du speicherst die Gegenstände einfach in deiner Map und sämtliche Gegenstände, deren Wert kleiner als beispielsweise 10 ist, sind durchgehbar.
Wenn ein Gegenstand zerschossen wird (beispielsweise sind alle zwischen 11 und 20 beschießbar) dann wird einfach der Wert in der Map geändert, fertig...Dann überprüfst du immer, wenn sich der Spieler bewegt, ob er sich auf ein Feld bewegt, dass begehbar ist...
Eine andere Möglichkeit wäre die, in einem Binärbaum oder Quadtree sämtliche Objekte zu speichern und zu suchen....
cYa
DjR
-
Hallo!
Wenn du nur Kisten und ähliches hast, dann reicht es aus wenn du überprüfst ob sich das Rechteck, das den Spieler umschließt und das der Kiste überschneiden. Das geht so:
if (spieler.x < kiste.x + kiste.breite && spieler.x + spieler.breite > kiste. x && spieler.y < kiste.y + kiste.hoehe && spieler.y + spieler.hoehe > kiste){
...
}Wenn du aber wirklich vor hast eine Landschaft so wie bei Worms zu machen (wo sich also wirklich jedes Pünktchen verändern kann), dann wird das ganze wesentlich schwieriger.
In diesem Fall würde ich dir ein 2-dimensionales Array empfehlen, wo du für jedes Pixel speicherst ob es belegt ist. Als mir das in einem Forum mal jemand gesagt hat wollte ich es auch nicht glauben, aber so viel Speicher wie man glaubt braucht das gar nicht.
Annahme: Kartengröße = 5000 x 5000 Pixel.
Also: 5000 x 5000 x 1 Byte (256 verschiedene Materialien pro Pixel sollten ausreichen) / (1024 x 1024) ist ca. 24 MB. Das sollte sogar auf PCs laufen, die schon ein paar Jahre alt sind (die restlichen Elemente des Spiels brauchen dann ja im Vergleich zu dem fast keinen Speicher mehr).Die Überprüfung ob du gegen ein Hindernis gelaufen bist geht dann einfach, in dem du z.B. die 4 Eckpunkte deines Spielers nimmst und schaust was in der entsprechenden Position im Array steht. Wenns genauer werden soll kannst du ja alle Pixel überprüfen, die den Spieler einschließen (nur die 4 Eckpunkte sind wahrscheinlich zu ungenau).
Wenn du in der Landschaft buddeln willst wirst du wohl die 2. Variante nehmen müssen.
mfg
-
IIRC hatten wir das Thema schonmal. Auch damals wurde schon auf die Möglichkeit erstmal ein gröberes Raster zu nehmen und wenn nötig Subdivision zu benutzen.
Bye, TGGC