2012-03-26 63 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); 
    } 
}