我在玩二维游戏程序。我的玩具项目是一个航海游戏,有可探索的岛屿和更多,但目前我正试图找到最好的方法,以适用于“海滩”(即软结束)的其他相当粗糙的岛屿。瓷砖尺寸为64x48。
我现在的解决方案是遍历每个瓷砖并查找周围的瓷砖,然后根据它们的周围环境,用正确的纹理替换水瓷砖。
我意识到这是一个非常有缺陷的方法,因为它是:
当为每个平铺调用环绕方法时,即使是受更改影响的平铺,效率也非常低
执行顺序可能意味着某些平铺更改被覆盖
你们知道我该怎么解决这个问题吗?
谢谢您!
编辑
此算法在加载映射时执行。

最佳答案

每行/每行一次检测边界(但不是一开始的角点)的算法是:

for each horizontal line
  previousTag = getTag( first line pixel ) // land or water in our example
  for each pixel of the line
    currentTag = getTag( this pixel )
    if ( previousTag == currentTag )
       continue // not a border
    else
       // We got a vertical border, do what is needed

    previousTag = currentTag
  endforeach
endforeach

垂直线也一样(不是x的增量,而是y的增量。我们还可以知道是否有角而不是垂直边界:
for each vertical line
  previousTag = getTag( first line pixel ) // land or water in our example
  for each pixel of the line
    currentTag = getTag( this pixel )
    if ( previousTag == currentTag )
       continue // not a border
    else
       if ( pixel on the right or on the left is a border )
         // we got a corner
       else
         // we got a horizontal border

    previousTag = currentTag
  endforeach
endforeach

这应该是一个预处理过程,除非你的地形是动态的。无论如何,不要每帧都那样做!

09-25 20:22