2012-03-26 130 views
0

當我到達x的末尾時,我正在生成我的世界(隨機,無限和2d),其中x是由y形成的部分。如果在第一節中我有丘陵,我怎麼能這樣做,以便在第二節那些丘陵將繼續?是否有某種方式可以讓這種情況發生?Procedural World Generation

因此,這將是這個樣子

1 =產生土地

2 =非產生的土地,將在兩個那些填補

我得到這個現在:

enter image description here

enter image description here

有什麼辦法可以讓這個流程更好?

+0

我看到你的山從上到下繼續。你是什​​麼意思,他們不連續? – Adrian 2012-03-26 02:53:27

+0

翻轉效果是由於截圖功能中的圖像鏡像,問題在於懸崖截斷 – blazingkin 2012-03-26 03:43:13

回答

2

這似乎只是一個算法問題。你的生成機制需要一個起點。在最初的調用中,它將是0,在隨後的調用中它將是前一個「塊」的結束位置。

如果我正在這樣做,我可能會使用某種分佈 - 例如使用某種分佈來創建下一個點的加號,例如0-3。 10%的時間是+/1 3,25%的時間是+/- 2,25%的時間是0和40%的時間是+/- 1。

2

如果我理解正確的問題,這裏是一個解決方案:

如果產生的山丘之間的增量(差異),並在一個固定值上限(這樣的變化是從來沒有過大),那麼你可以隨身攜帶當生成新的一個山時,從上一節的最後一個山的價值,並將第一個隨機生成的(新節的)三角洲應用到結轉山的大小。

1

如果你'按順序生成這些「山丘」,我會創建一個訪問器方法,爲所述山丘的延續提供一個值,以開始下一部分。看起來你正在爲山坡創建一個隨機的高度,當在一個單獨的部分中繪製一座山時,它已經被某個值限制了。使用這種新的訪問器方法擴展該功能。

我對此有一個可能的實現。

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); 
    } 
}