根据相邻图块选择图块


10

我正在使用平铺的地图编辑器,因此我需要根据相邻的图块自动选择图块。例如,当将道路砖放置在另一个道路砖旁边时,需要将两者定向,以便它们形成连续的道路。如果周围还有其他道路,我们可能需要使用转角或交叉路口砖。

谁能推荐一些算法来做到这一点?该游戏使用8向方形平铺地图。


每当用户放下新的图块并相应地调整新图块的方向时,您能否仅检查周围的8个图块?当然,您需要在每个图块上存储一些额外的信息,例如方向和类型。
传宇

我正在检查所有周围的瓷砖,但我不知道如何处理所有瓷砖组合。例如,您有七个可能的图块可供选择(水平,垂直,四个角和一个十字)。我曾想过使用复杂的switch语句,但那感觉是错误的。
alekop 2012年

Answers:


18

也许这就是通常的做法。您有不同的图块列表,这些图块以所有可能的方向表示道路图块。从左到右,四个角,从上到下,不限。现在,您将为所有这些图块建立索引,每个图块均具有一个字节。8位,每个方向一位。这可以在哈希图中,也可以在文件名中...但是您想要这样做。

所以你有这个:

在此处输入图片说明

上述图块的字节码为00000000。然后,从左到右(或从右到左)的图块如下所示:

在此处输入图片说明

该图块的字节码是10001000或136。作为另一个示例,让我们看一下三向交叉点:

在此处输入图片说明

该图块的字节码是10101000

您可能会看到我要去的地方。您可以在表示连接的字节中设置位位置。这比尝试做一些我以前见过的大型if / else链要好得多。当您要放置磁贴时,请检查其周围的磁贴并在创建过程中创建一个字节。设置1表示有道路(或您要连接的道路)的瓷砖,设置0表示没有道路的瓷砖。完成后,您将获得所需的确切图块的字节码。

请注意,在创建资产时,您可以通过简单地旋转并为其分配正确的字节码来重用许多资产。

编辑:更新图像以减少cr脚。是的,这些比以前更好。


非常好!简单高效。我唯一不了解的是您如何获得这些位掩码。例如,如何从数字3和7得到17的位掩码?
alekop 2012年

没关系,我知道您在做什么。您正在设置第3位和第7位,但您是从左侧开始计数,而不是从右侧开始计数。
alekop 2012年

哇,真令人尴尬。我的字节序全部混杂了。那是我要解决的意外!
MichaelHouse

太好了,现在我的评论没有任何意义!:p开玩笑,谢谢您的回答。那正是我想要的。
alekop 2012年

1
很好的解释。我有一篇博客文章介绍了具有实际代码和图块分辨率的相同技术:kitsu.github.io/2016/07/18/roguelike-project-05
kitsu.eb 2016年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.