我想在我的六角形 map 中显示最大移动叠加层。例如:
中心点在 50,50 允许的最大移动量为 5 个六角形。
这是我用于覆盖的代码:
for (int height = lowHeight; height <= highHeight; height++)
{
for (int width = lowWidth; width <= highWidth; width++)
{
[self hexOnMap:height :width :@"green"];
}
}
宽度为 xCoordinate 50 高度为y坐标50
低高度 = 高度 - 5
highHeight = 高度 + 5
低宽度 = 宽度 - 5
高宽度 = 宽度 + 5
显然我的循环不工作,因为角在移动超过 5 个六角形。因为我觉得我的智商每分钟都在下降,请有人告诉我明显的:) 5 的移动值不是静态的。
编辑:@DPenner
感谢您的回复。我试过类似的东西,但这个被诅咒的东西仍然无法工作。您的代码显示此结果:
编辑 2:@DPenner - 你几乎成功了。我正在用您的代码上传叠加层,以便您查看。昨晚我终于找到了一篇很棒的文章,它给了我解决这个问题所需的线索。但我真的很感谢你的帮助并努力解决这个问题!!!
最佳答案
我删除了我的旧答案,因为它是完全错误的:我忘记考虑相邻的六角形有时在 x 和 y 坐标上可能不同。捕捉它很棘手,但以下代码应该可以工作:
如果中心X坐标是偶数:
for (int width = lowWidth; width <= highWidth; width++)
{
double heightNeeded = 5 - abs((centerX - width)/2.0);
for (int height = centerY - (int)ceil(heightNeeded); height <= centerY + (int)floor(heightNeeded); height++)
{
[self hexOnMap:height :width :@"green"];
}
}
如果中心 X 坐标是奇数,交换 floor 和 ceiling 函数。将 5 更改为不同大小的叠加层。
我亲手检查了一下,似乎工作正常。外层循环是宽度/X 循环,因为它的 X 坐标在水平方向呈锯齿状,天花板和地板在内部高度/Y 循环中起到“固定”的作用。
关于ios - 在六边形 map 上显示最大范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16779253/