0

我想在我的十六进制地图中显示最大移动叠加。例如:

中心点在 50,50 最大允许移动是 5 格。

这是我用于覆盖的代码:

for (int height = lowHeight; height <= highHeight; height++)
{
    for (int width = lowWidth; width <= highWidth; width++)
    {
        [self hexOnMap:height :width :@"green"];
    }
}

宽度为 xCoordinate 50 高度为 yCoordinate 50

低高度 = 高度 - 5

highHeight = 高度 + 5

低宽度 = 宽度 - 5

高度宽度 = 宽度 + 5

显然我的循环不起作用,因为角落的移动超过 5 个六角形。当我觉得我的智商每时每刻都在下降时,请有人给我看一下明显的:) 5 的运动值不是静态的。

在此处输入图像描述

编辑:@DPenner

感谢您的回复。我尝试了类似的东西,但这个被诅咒的东西仍然拒绝工作。您的代码显示此结果:

在此处输入图像描述

编辑 2:@DPenner - 你几乎拥有它。我正在使用您的代码上传叠加层,以便您查看。昨晚我最终找到了一篇很棒的文章,它给了我解决这个问题所需的线索。但我真的很感谢你的帮助并试图解决这个问题!!!

在此处输入图像描述

4

2 回答 2

1

我已经删除了我的旧答案,因为它完全错误:我忘记考虑相邻的六边形有时在 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 坐标是奇数,则交换地板和天花板函数。将 5 更改为不同大小的叠加层。

我手动检查了它,它似乎工作正常。外部循环是宽度/X 循环,因为它的 X 坐标在水平方向上呈锯齿形,天花板和地板功能在内部高度/Y 循环中“固定”。

于 2013-05-28T03:45:37.423 回答
1

在几乎 24 小时不睡觉之后,我找到了一篇关于这个问题的精彩文章。文章在这里:

http://keeekerdc.com/2011/03/hexagon-grids-coordinate-systems-and-distance-calculations/

这是使它全部工作的代码:

for (int y = minY; y <= maxY; y++)
{
    for (int x = minX; x <= maxX; x++)
    {
        int xDistance = (x - startXcoordinate);

        int yStart = 0;
        if(x > startXcoordinate)
            yStart = -1;

        int yDistance = ((xDistance * -1) + yStart) / 2;

        yDistance = yDistance + (y - startYcoordinate);

        int z = (xDistance + yDistance)* -1 ;


        int maxDistance = 0;

        if(abs(xDistance) > maxDistance)
            maxDistance = abs(xDistance);

        if(abs(yDistance) > maxDistance)
            maxDistance = abs(yDistance);

        if(abs(z) > maxDistance)
            maxDistance = abs(z);

        if(abs(maxDistance) <= patrolRange)
            [self hexOnMap:y :x :@"green"];
    }
}

在此处输入图像描述

于 2013-05-28T17:28:54.033 回答