如何为六边形网格着色,使其没有相同颜色的邻居?

时间:2019-01-09 06:18:46

标签: javascript hexagonal-tiles

我有一个可生成十六进制网格的javascript应用。每个十六进制都是尖的,每个立方体坐标(x,y和z)的三个变量都位于顶部。我还有一个带有三个十六进制子画面的数组。

我尝试过sprite = sprites[hex.x&3],它会产生整齐的十六进制行。我也尝试通过sprite = sprites[(hex.x + hex.y&3)&3]根据列来偏移行,但这没有用。我目前对公式不太满意。

我知道我需要不少于三个精灵,但是我找不到一种方法来组合三个立方体坐标以在数组上显示正确的精灵:(

1 个答案:

答案 0 :(得分:0)

在十六进制网格中,您需要三种颜色来为每个十六进制着色,以使其与邻居的颜色不同: Hexagonal grid with three colors so that colors never match their neighbor

您的解决方案处在正确的轨道上。与其添加x+y,不如减去x-y。另一个变化是&3用于位操作;您需要使用%3。但是,在某些语言(包括Javascript)中,%3可以返回负数,因此您需要使用((___%3)+3)%3使其为正数。

您想要的颜色/图片ID是((x-y)%3 + 3) % 3。我做了an interactive demo进行测试。