Momentan arbeite ich an einem kachelbasierten 2D-Plattformer, der Terraria in gewisser Weise ähnelt, obwohl ich Probleme mit der Geländegenerierung habe. Ich habe einige Grundlagen gemacht, obwohl sie nicht als nützlich herauskommen.
Ich habe ein paar verschiedene Techniken wie Perlin Noise ausprobiert und über einige andere wie Midpoint Displacement gelesen, obwohl ich nicht sicher bin, welche am besten geeignet ist, oder eine Kombination verschiedener Techniken, um verschiedene Bereiche zu erzeugen. (Zum Beispiel Mittelpunktverschiebung für die allgemeine Form des Geländes und Perlin-Rauschen für die Höhlen.)
Ich habe eine hervorragende Erklärung gefunden, wie ich es mit der Accidental Noise Library kombinieren kann , obwohl es sich in C ++ befindet, und ich kenne nicht genug C ++, um es in eine DLL zu kompilieren, die ich in C # verwenden kann. Ich habe versucht, dies in C # zu kopieren, obwohl ich nicht weiß, wie ich zwei Effekte zusammenführen kann (den Farbverlauf für die allgemeine Basis und dann das Fraktal für Details).
Derzeit verwende ich ein Plasma-Fraktal und die Ergebnisse sind äußerst unterschiedlich. Zum Beispiel kann es Terrain erzeugen, in dem es kaum eine Oberfläche gibt, oder es kann Terrain erzeugen, in dem es überhaupt keine Oberfläche gibt.
Ein Beispiel für eine ordentliche Karte wäre jedoch besser, wenn noch weitere Verbesserungen vorgenommen würden. (Schwarz ist fest, Weiß ist Luft):
Und ein Beispiel für eine schreckliche Karte. (Schwarz ist fest, Weiß ist Luft):
Grundsätzlich möchte ich wissen, wie man das Terrain besser generieren oder zwingen kann, eine angemessene Oberfläche zu gewährleisten, wobei die Generierungszeit so schnell wie möglich ist. Oder alternativ, wie ich in der Lage wäre, dasselbe Ergebnis wie die Accidental Noise Library zu erzielen, jedoch in C #.
Alle Beispiele wären sehr dankbar.
quelle
Antworten:
Ich würde versuchen, bei Perlin-Geräuschen zu bleiben, aber ein Gewicht basierend auf der Höhe hinzufügen, um eine bestimmte durchschnittliche Dichte in bestimmten Höhen zu gewährleisten. So zitieren Sie einen Teil von Notchs Beitrag zur Minecraft-Geländegenerierung :
Im Wesentlichen nehmen Sie ein kleines Stück eines Minecraft-Terrains. Erzeugen Sie also 2D-Perlin-Rauschen, gewichten Sie es jedoch so, dass alles über einem bestimmten Punkt wahrscheinlich Luft und alles unter einem bestimmten Punkt wahrscheinlich Erde ist.
Dadurch erhalten Sie ein gutes Gelände mit einigen Überhängen und interessanten Merkmalen sowie einigen Höhlen und schwimmenden Inseln. (Wenn Sie keine schwimmenden Inseln möchten, können Sie diese testen und manuell entfernen.) Mit dieser Methode erhalten Sie keine Tunnel. Daher möchten Sie eine Methode, mit der Sie diese nach der Geländegenerierung hinzufügen können, z. B. a Random-Walk .
quelle