我在玩二维游戏程序。我的玩具项目是一个航海游戏,有可探索的岛屿和更多,但目前我正试图找到最好的方法,以适用于“海滩”(即软结束)的其他相当粗糙的岛屿。瓷砖尺寸为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
这应该是一个预处理过程,除非你的地形是动态的。无论如何,不要每帧都那样做!