我正在使用平铺的地图编辑器,因此我需要根据相邻的图块自动选择图块。例如,当将道路砖放置在另一个道路砖旁边时,需要将两者定向,以便它们形成连续的道路。如果周围还有其他道路,我们可能需要使用转角或交叉路口砖。
谁能推荐一些算法来做到这一点?该游戏使用8向方形平铺地图。
我正在使用平铺的地图编辑器,因此我需要根据相邻的图块自动选择图块。例如,当将道路砖放置在另一个道路砖旁边时,需要将两者定向,以便它们形成连续的道路。如果周围还有其他道路,我们可能需要使用转角或交叉路口砖。
谁能推荐一些算法来做到这一点?该游戏使用8向方形平铺地图。
Answers:
也许这就是通常的做法。您有不同的图块列表,这些图块以所有可能的方向表示道路图块。从左到右,四个角,从上到下,不限。现在,您将为所有这些图块建立索引,每个图块均具有一个字节。8位,每个方向一位。这可以在哈希图中,也可以在文件名中...但是您想要这样做。
所以你有这个:
上述图块的字节码为00000000。然后,从左到右(或从右到左)的图块如下所示:
该图块的字节码是10001000或136。作为另一个示例,让我们看一下三向交叉点:
该图块的字节码是10101000。
您可能会看到我要去的地方。您可以在表示连接的字节中设置位位置。这比尝试做一些我以前见过的大型if / else链要好得多。当您要放置磁贴时,请检查其周围的磁贴并在创建过程中创建一个字节。设置1表示有道路(或您要连接的道路)的瓷砖,设置0表示没有道路的瓷砖。完成后,您将获得所需的确切图块的字节码。
请注意,在创建资产时,您可以通过简单地旋转并为其分配正确的字节码来重用许多资产。
编辑:更新图像以减少cr脚。是的,这些比以前更好。
我建议您在此方便的页面上查看更多信息,因为它详细介绍了您所做的工作的各个方面以及一些潜在的优化方法:http : //www.angryfishstudios.com / 2011/04 / adventures-in-bitmasking /
tldr是查询每个相邻的单元并将组合存储在位域/字节中,然后将其传递通过映射,该映射将0到255之间的数字转换为0到47之间的值,这对应于唯一的图像。