自动平铺瓷砖技术在游戏开发中有着悠久的历史,尤其是在2D游戏的地图编辑中。这种技术通过重复使用有限的图形块或瓷砖来构建大型2D环境,从而实现高效的资源利用和快速的内容生成。尽管这种图形风格可能会显得块状和重复,但通过精心的设计,可以有效地打破这种模式,创造出更加自然和连贯的视觉效果。
在早期的视频游戏开发中,基于瓦片的图形(如图1所示)已经成为2D游戏的标志。这种图形通过重复使用一组相对有限的图形块或瓷砖来展示大型2D环境。虽然这种图形风格往往显得块状和重复,但通过巧妙的设计,可以有效地减轻这些问题。
例如,使用过渡瓦片(如图1中的草地-水域和草地-泥土边界)是一种技术。然而,手动且正确地放置这些过渡瓦片往往是一个繁琐的过程。一个高级的瓦片地图编辑器允许用户标记这些瓦片,使编辑器应用程序能够自动地将新放置的瓦片(例如水)与周围正确的过渡瓦片(如水边)融合在一起。
大多数自动瓦片集由14个瓦片组成,即内部和外部瓦片(例如完整的草地和完整的水瓦片),顶部、底部、左侧和右侧边缘,四个外角和四个内角。这里描述的算法需要额外的两个瓦片,总共16个。
这个算法将瓦片(无论是过渡瓦片还是其他瓦片)视为由四个象限组成。这些象限或角落可以属于一侧(草地)或另一侧(水),相应的边界位于瓦片内。所有角落的可能性产生了2 x 2 x 2 x 2 = 16种可能的瓦片组合。
这些16种组合可以通过组合一个4位二进制数来索引:
b3 b2 b1 b0
其中每个位bi
对应一个角落类型。按照惯例,位按照从左上角到右上角,再到左下角和右下角的顺序映射,如图2所示。
使用这个4位索引,瓦片将按照以下顺序排序:
图3 - 按4位索引排序的自动瓦片
这个过程也可以反过来,从而可以从给定的4位索引确定角落类型。这为实现下一节描述的自动瓦片提供了一种方法。为了简单起见,假设地图只包含上述16个瓦片,并且可以直接使用4位角落索引引用它们。
当在地图中放置一个新瓦片时,从瓦片及其8个邻居的4位索引中提取四个角落位。对于与新瓦片共享边缘的四个瓦片(左、右、上、下),通过重用新瓦片最靠近共享边缘的2位和邻居瓦片最远离边缘的2位来构建新的4位索引。新的4位索引有效地产生了与新瓦片正确融合的过渡瓦片。
类似地,对于与新瓦片共享角落的四个剩余邻居(左上、右上、左下、右下),使用新瓦片最靠近共享角落的位和邻居瓦片中远离共享角落的3位来构建4位索引。这些新的4位索引同样产生了与新瓦片正确融合的四个角落邻居。
邻居瓦片被替换为对应于新计算的4位索引的新瓦片。
图4 - 角落位索引匹配
除了上述算法之外,还应该考虑一些问题:
边缘瓦片:在处理地图边缘或角落的瓦片时要小心,因为这些瓦片可能没有通常的8个邻居瓦片。
瓦片组织:上述算法假设4位索引直接对应于瓦片索引。然而,自动瓦片集可能不一定从索引0开始,也不一定是连续的或按照图3中规定的顺序。为了解决这个问题,必须维护任意瓦片索引和4位角落索引之间的双向映射。
多样性:尽管使用了平滑过渡的瓦片,但观察者仍然可能因为重复的相同瓦片模式而感到疏远,如图1所示。通过将每个4位索引映射到多个瓦片变体,并让算法为新放置的瓦片及其邻居随机选择变体,可以改进算法。