0

在我的代码中,我有一个嵌套循环,除了 if 语句之外,无论条件如何,它都不会迭代。如果没有 if 语句,for 循环中迭代循环的部分代码将变得无法访问。无论我尝试了什么,我都无法让内部循环进行迭代。

    class Map
    {
        public int Width { get; set; }
        public int Height { get; set; }
        public Vector2[] positions = new Vector2[500*500];

        private GroundVoxel[,] map = new GroundVoxel[500, 500];
        private Vector2 voxelPosition = new Vector2(0,0);
        private static int sizeX = 499, sizeY = 499, airLevel = 425;
        private int positionX = 0, positionY = 0, vectorNumber = 0;

        public Map()
        {
        }
        public Vector2[] Initialize()
        {
            for (int i = 0; i <= sizeY; i++)
            {
                for (int j = 0; j <= sizeX; j++) <-- This does not iterate.
                {
                    map[positionX, positionY] = new GroundVoxel(voxelPosition);
                    voxelPosition.X += 80;
                    positions[vectorNumber] = voxelPosition;
                    vectorNumber += 1;
                    if (j == sizeX) <-- This always executes even though j != sizeX.
                    {
                        break;
                    }
                }
                voxelPosition.Y += 80;
                voxelPosition.X = 0;
            }
            return positions;
        }
    }
}
4

2 回答 2

1

您必须使用完全限定名称来引用静态类成员变量,例如sizeXand sizeY
是一篇关于这个主题的文章。

希望这可以帮助!

于 2013-05-01T15:33:04.160 回答
0

我认为我们需要更多代码。我已将您的代码复制到一个基本的 winforms 测试应用程序中,并且我的两个循环都按预期进行迭代。

我不熟悉 XNA 或“VoxelPosition”是什么,但我认为您在这里有一个潜伏的错误:

voxelPosition.X += 80;
positions[vectorNumber] = voxelPosition;

您只是将相同的指针存储在一个非常大的数组中——所有条目都将指向同一个对象。

每次通过循环都需要声明另一个对象来存储单独的向量条目。

希望这可以帮助?

于 2013-05-01T15:40:58.240 回答