javascript - 如何为六边形网格着色,使其没有相同颜色的邻居?
问题描述
我有一个生成十六进制网格的 javascript 应用程序。对于每个立方体坐标(x、y 和 z),每个十六进制顶部都有三个变量。我还有一个包含三个十六进制精灵的数组。
我试过sprite = sprites[hex.x&3]
了,它会产生整齐的六角形。我还尝试根据通过列偏移行,sprite = sprites[(hex.x + hex.y&3)&3]
但这没有用。我目前正在摆弄这个公式,但收效甚微。
我知道我需要不少于三个精灵来做到这一点,但我找不到一种方法来组合三个立方体坐标以在数组上显示正确的精灵:(
解决方案
在十六进制网格中,您需要三种颜色来为每个十六进制着色,以使其与相邻的颜色不同:
您的解决方案走在了正确的轨道上。而不是添加x+y
你会想要减去x-y
。另一个变化是&3
位操作;你会想要%3
的。但是,在某些语言中,包括 Javascript,%3
可以返回一个负数,因此您需要使用((___%3)+3)%3
它来使其为正数。
您想要的颜色/精灵 id 是((x-y)%3 + 3) % 3
. 我做了一个交互式演示来测试这个。
推荐阅读
- impala - 如何使用 HUE 在 Impala 查询中设置变量?
- python - 删除像 RTL 这样的文本方向标记,而不删除所有非 ascii 字符
- python - Dunders 不再在 Pycharm 中合并?
- flutter - 导航到另一个 pageView 或任何 View 时,Bloc 小部件 reftech 数据(重建)
- javascript - Gatsby:功能只是在主页上,在其他上停止,在重新访问主页时重新启动
- r - 如何控制条形图中值标签的小数位
- amazon-web-services - 恢复出厂设置 AWS 账户
- swift - 为什么图片在 SwiftUI 中从视图顶部移动到屏幕的中间部分?
- swift - Swift 5 Mac App - 屏幕截图,将选定区域复制到剪贴板
- python - 在 pexpect 中调用 sleep bash 命令