带有for循环的不均匀网格

时间:2014-07-27 15:45:31

标签: c# for-loop xna-4.0

所以这是我的问题:

我有一个RPG广告资源,通过两个for循环在网格(7x4)中绘制项目:

[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的结束行。

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

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

编辑:感谢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,它就不会显示任何项目。上面的代码修复了它。再次感谢!

1 个答案:

答案 0 :(得分:3)

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

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

请注意,我已经翻转了商品订单。你的列是明智的,现在它是行的。我假设,你的意思是这个,因为你有一个固定的网格宽度为7和一个可变的行号。如果这不正确,请发表评论。