C# 对循环内计算的理解

C# 对循环内计算的理解,c#,xna,collision,for-in-loop,C#,Xna,Collision,For In Loop,我这里有一个小代码,像素从顶部掉落,如果它们与块碰撞,它们将停留在块的表面上。然后,如果有另一个像素落在不再落下的像素上,它将累加起来。这就是我想做的,但是在第二个像素加起来之后,没有更多的像素会超过其他像素。我认为j-1是索引-1中的当前int,所以如果它是10,那么它将是9,所以我有点困惑为什么intPosition[j-1].Y-1不能正常工作 public void ParticleUpdate() { for (int j = 0; j < 1000; j

我这里有一个小代码,像素从顶部掉落,如果它们与块碰撞,它们将停留在块的表面上。然后,如果有另一个像素落在不再落下的像素上,它将累加起来。这就是我想做的,但是在第二个像素加起来之后,没有更多的像素会超过其他像素。我认为j-1是索引-1中的当前int,所以如果它是10,那么它将是9,所以我有点困惑为什么intPosition[j-1].Y-1不能正常工作

public void ParticleUpdate()
    {
        for (int j = 0; j < 1000; j++)
        {
            Position[j].Y += Gravity;
            for (int u = 0; u < GlobalClass.BlocksPositions.Count; u++)
            {
                if (new Rectangle((int)GlobalClass.BlocksPositions[u].X, (int)GlobalClass.BlocksPositions[u].Y, 8, 8).Intersects(new Rectangle((int)Position[j].X, (int)Position[j].Y, 1, 1)))
                {
                    Position[j].Y = (int)GlobalClass.BlocksPositions[u].Y - 1;
                    //This code works perfectly.
                }
            }
            if (j - 1 > 0)
            {
                if (new Rectangle((int)Position[j - 1].X, (int)Position[j - 1].Y, 1, 1).Intersects(new Rectangle((int)Position[j].X, (int)Position[j].Y, 1, 1)))
                {
                    Position[j].Y = (int)Position[j - 1].Y - 1; 
                    //Here is the problem.
                }
            }
        }
    }

此外,如果我放置了大量的块,我会遇到一些滞后问题。有没有办法对此进行优化?

位置上是否存在1000个对象?有可能从j<1000变为Position.Length吗?…如果它的位置小于1000,这将大大加快代码的速度…是的,可以有更少的粒子,我想可能会有其他方法来编写代码,从而加快速度,但是如果唯一的方法是减少粒子或块,那么我会去做。你对我的主要问题有什么想法吗?你的职位是如何填补的?因为您总是假设列表中当前元素之前的元素是唯一需要检查冲突的元素。但是由于它以这种方式遍历整个列表,它意味着所有粒子都有相同的位置。X-是这样吗?