如何创建方形hextilemap?

时间:2013-01-28 17:56:27

标签: c# windows-phone-7

我有这段代码:

            int tX = 1;

            for (int y = 0; y < ROWS; y++)
            {
                for (int x = 0; x < tX; x++)
                {
                    Tile t = new Tile()
                    {
                        Texture = tile,
                        Position = new Microsoft.Xna.Framework.Point(x, y),
                        Troops = rnd.Next(1, 4),
                        OwnedByPlayerIndex = 0
                    };
                    t.Tap += tile_Tap;

                    if (t.Position.Y < ROWS)
                        tiles.Add(t);
                }
                tX += 2;

                tX = (int)MathHelper.Clamp(tX, 0, COLS);
            }

我想要做的是在矩形中创建一个地图,按行数和列数限制地图。

但它不起作用,因为它没有跟进并完成最后一个角落,使其不完整

enter image description here

1 个答案:

答案 0 :(得分:1)

你似乎有一些还原逻辑,你的内部循环不是遍历所有列。如果要填充整个矩形,则根本不需要tX。例如:

for (int y = 0; y < ROWS; y++)
{
    for (int x = 0; x < COLS; x++)
    {
        Tile t = new Tile()
        {
            Texture = tile,
            Position = new Microsoft.Xna.Framework.Point(x, y),
            Troops = rnd.Next(1, 4),
            OwnedByPlayerIndex = 0
        };
        t.Tap += tile_Tap;
        tiles.Add(t);
    }
}

此外,从您的屏幕截图看,如果整个底行都被填充,那么较低的交错的六边形将与红色矩形的底部重叠。如果您不想添加这些较低的十六进制,那么您需要有条件地添加它们:

...
if (y > 0 || 0 == (x & 1))
    tiles.Add(t);