0

我有这个代码:

            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);
            }

我试图做的是在矩形内创建一个地图,通过行数和列数限制地图。

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

在此处输入图像描述

4

1 回答 1

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);
于 2013-01-28T19:26:27.103 回答