2012-03-26 6 views
0

Ich erzeuge meine Welt (zufällig, unendlich und 2d) in Abschnitten, die X sind, wenn ich das Ende von X erreichen, wird ein neuer Abschnitt gebildet. Wenn ich in Abschnitt eins Hügel habe, wie kann ich es so machen, dass im zweiten Abschnitt diese Hügel weitergehen? Gibt es eine Art, wie ich das erreichen könnte?Procedural World Generation

So wäre es etwa so aussehen

1 = erzeugt Land

2 = non Land erzeugt, die in den zwei Einsen

ich dies jetzt füllen:

enter image description here

enter image description here

Gibt es eine Möglichkeit, diesen Fluss besser zu machen?

+0

Ich sehe Ihre Hügel von oben nach unten fortsetzen. Was meinst du damit, dass sie nicht kontinuierlich sind? – Adrian

+0

Der Flip-Effekt war aufgrund eines Bildspiegels in der Screenshot-Funktion, das Problem ist, dass die Klippe scharf abschneidet – blazingkin

Antwort

2

Dies scheint nur ein Problem mit dem Algorithmus zu sein. Ihr Erzeugungsmechanismus benötigt einen Startpunkt. Beim ersten Aufruf wäre es 0, bei nachfolgenden Aufrufen wäre es die letzte Position des vorherigen "Chunks".

Wenn ich dies tun würde, würde ich wahrscheinlich die Höhe des nächsten Punkt plus minus sagen 0-3 von der vorherigen, mit einer Art der Verteilung - z. 10% der Zeit ist es +/1 3, 25% der Zeit ist es +/- 2, 25% der Zeit ist es 0 und 40% der Zeit ist es +/- 1.

2

Wenn ich dein Problem richtig verstanden hat, ist hier eine Lösung:

Wenn Sie das Delta (Differenz) zwischen den Hügeln erzeugt und auf einem festen Wert gekappt (so Veränderungen sind nie zu groß), dann können Sie tragen über den Wert des letzten Hügels von dem vorherigen Abschnitt, wenn der neue erzeugt wird und das erste zufällig generierte Delta (des neuen Abschnitts) auf die übertragene Hügelgröße angewendet wird.

1

Wenn Sie Wenn ich diese "Hügel" der Reihe nach erzeuge, würde ich eine Zugriffsmethode erstellen, die die Fortsetzung des Hügels mit einem Wert versorgt, um den nächsten Abschnitt zu beginnen. Es scheint, dass Sie eine zufällige Höhe für den Hügel erstellen, der bereits durch einen Wert eingeschränkt wird, wenn Sie einen Hügel in einem einzelnen Abschnitt zeichnen. Erweitern Sie diese Funktionalität mit dieser neuen Zugriffsmethode.

Ich nehme eine mögliche Implementierung von diesem.

public class DrawHillSection { 
    private int index; 
    private int x[50]; 
    public void drawHillSection() { 
     for(int i = 0; i < 50; i++) { 
      if (i == 0) { 
       getPreviousHillSectionHeight(index - 1) 
      } 
      else { 
       ... 
       // Your current implementation to create random 
       // height with some delta-y limit. 
       ... 
      } 
     } 
    } 

    public void getPreviousHillSectionHeight(int index) 
    { 
     return (x[49].height); 
    } 
}