带有for循环的不均匀网格

本文关键字:不均匀 网格 循环 for 带有 | 更新日期: 2023-09-27 18:15:00

我的问题是:

我有一个RPG库存,通过两个for循环在网格中绘制物品:

[Update Method]
index = 0;
for (int x = 0; x < 7; x++)
{
    for (int y = 0; y < ItemList.Count / 7; y++)
    {
        ItemList[index].gridLocation = new Point(x, y);
        index++;
    }
}

*ItemList只是一个BaseItem类的列表。

我希望这段代码是这样绘制网格的:

X X X X X X X
X X X X X X X
X X X X X X X
X X X X X

但是它是这样做的:

X X X X X X X
X X X X X X X
X X X X X X X

截断不大于等于7的结束行

现在当我使用一个项目时(使用一个项目从列表中删除它),它将下一个隐藏项目添加到第三行的末尾。

我很感激任何帮助。谢谢你,

编辑:感谢Nico的帮助,这是我的代码现在的样子:

                if (ItemList.Count > 6)
                {
                    for (int index = 0; index < ItemList.Count; ++index)
                    {
                        ItemList[index].gridLocation = new Point(index % 7, (int)(index / 7));
                        ItemList[index].UpdateValues(ScreenLocation, itemSize, LocY);
                    }
                }
                else if (ItemList.Count < 7)
                {
                    for (int index = 0; index < ItemList.Count; ++index)
                    {
                        ItemList[index].gridLocation = new Point(index, 0);
                        ItemList[index].UpdateValues(ScreenLocation, itemSize, LocY);
                    }
                }

我发现有一个问题,如果itemList低于7,它不会显示任何项目。上面的代码修复了它。再次感谢!

带有for循环的不均匀网格

您可以使用索引进行迭代:

for(int index = 0; index < ItemList.Count; ++index)
    ItemList[index].gridLocation = new Point(index % 7, (int)(index / 7));

注意,我颠倒了项目顺序。你的是列式的,现在是行式的。我认为,你的意思是,因为你有一个固定的网格宽度7和一个可变的行数。如果不正确,请留下评论