【问题标题】:Find the value of a 2D arrays neighbors?找到二维数组邻居的值?
【发布时间】:2019-08-20 20:14:40
【问题描述】:

我有一个 2d 数组,它使用 perlin 噪声生成地形,然后将(3D)块放置在特定高度 - 在您点击离开之前,我需要帮助的是生成“高度图”的 2D 数组.我试图通过直接检查二维数组中的上、下、左和右值来确定它旁边的块是否处于相同的高度(如果它是“相邻的”)。如果它们相等,则它们处于相同的高度,因此是“邻居”。如果我遇到的问题是检查总是对所有邻居返回 true,即使该块没有邻居。

perlin 噪声高度图的一个小例子

151514141312121111
151414131313121211
141414131312121211
141313131312121211
131313121212121111
131312121212111111
121212121111111111
111111111110101111
111111111010101111
111111111010101010
111111111010101010
101011101010101010
101010101099109999
991010109999988889
999109999888888999

这里是检查代码,你必须看到整个文件,链接在下面的上下文

      if (terrain[x][leftColumn] == terrain[x][z]) {
        neighbors[2] = true; // left side
      }
      if (terrain[x][rightColumn] == terrain[x][z]) {
        neighbors[3] = true; //right side
      }
      if (terrain[belowRow][z] == terrain[x][z]) {
        neighbors[4] = true; // front side (below)
      }
      if (terrain[aboveRow][z] == terrain[x][z]) {
        neighbors[5] = true; // back side (above)
      }    

Pastebin:https://www.pastiebin.com/5d5c5416391ec
任何帮助表示赞赏,Asher

【问题讨论】:

  • 您在循环的所有迭代中重复使用相同的邻居数组,并且您从未将其任何元素设置为 false。因此,一旦邻居对一个单元格变为真,则对所有剩余单元格都为真。了解本地变量。尽可能缩小变量的范围。

标签: java arrays multidimensional-array processing


【解决方案1】:

移动这个静态变量初始化

boolean[] neighbors = new boolean[]{false, false, false, false, false, false};

在内部循环中,您可以检查每个块的邻居,为每个单独的块实例化一个新的邻居数组。现在邻居是一个静态变量。您永远不会重置邻居数组上的值,因此在每次迭代后它仍然是正确的。

编辑:

还有

  if (belowRow > 1) { 
    belowRowExists = false;
    belowRow = 0;
  } 
  if (rightColumn > - 1) { 
    rightColumnExists = false;
    rightColumn = 0;
  }

错了,你要检查列或行是否超出范围对吗?然后你想看看它们是否 >= chunkSize。

【讨论】:

  • 它有点工作,但是有些块感觉不到它们的邻居,但这可能是我的代码的另一个问题,我不确定
  • 编辑了答案,我相信应该可以解决问题
  • 改进了它,但它仍然没有正确感知它的邻居
猜你喜欢
  • 2017-10-04
  • 1970-01-01
  • 2010-10-13
  • 1970-01-01
  • 2022-12-01
  • 2021-05-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多