【问题标题】:Procedural World Generation程序世界生成
【发布时间】:2014-01-12 17:35:48
【问题描述】:

我在 x x y 的部分中生成我的世界(随机、无限和 2d),当我到达 x 的末尾时,会形成一个新部分。如果在第一节我有山丘,我怎样才能使它在第二节中继续这些山丘?有什么方法可以让我做到这一点吗?

所以它看起来像这样

1221

1 = 生成的土地

2 = 将填充两个的非生成土地

我现在明白了:

有什么办法可以让这个流程变得更好?

【问题讨论】:

  • 我看到你的山丘从上到下一直延伸。你的意思是它们不是连续的?
  • 翻转效果是由于截图功能中的图像镜像,问题是悬崖断得很尖锐

标签: java random


【解决方案1】:

这似乎只是一个算法问题。您的生成机制需要一个起点。在最初的调用中,它会说 0,在随后的调用中,它将是前一个“块”的结束位置。

如果我这样做,我可能会使用某种分布,使下一个点的高度加上前一个点的减号 0-3 - 例如10% 的时间为 +/- 3,25% 的时间为 +/- 2,25% 的时间为 0,40% 的时间为 +/- 1。

【讨论】:

    【解决方案2】:

    如果我正确理解了您的问题,这里有一个解决方案:

    如果您生成了山丘之间的增量(差异)并以固定值设置上限(因此变化永远不会太大),那么您可以在生成新山丘时继承上一节中最后一座山丘的值,并将第一个随机生成的 delta(新部分的)应用于结转的小山大小。

    【讨论】:

      【解决方案3】:

      如果您按顺序生成这些“山丘”,我将创建一个访问器方法,为所述山丘的延续提供一个值以开始下一节。在单个部分中绘制山丘时,您似乎正在为山丘创建一个随机高度,以使其受到某个值的约束。使用这种新的访问器方法扩展该功能。

      我对此的可能实现的看法。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-07-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-03
        • 1970-01-01
        相关资源
        最近更新 更多