-1

找了三天没找到解决办法,代码如下:

if (keyboardState.IsKeyDown(Keys.Right))
        {
            for (int i = GlobalClass.BlocksPositions.Count - 1; i > 0; i--)
            {
                if (new Rectangle((int)GlobalClass.BlocksPositions[i].X, (int)GlobalClass.BlocksPositions[i].Y, bT.Width, bT.Height).Intersects(new Rectangle((int)Position.X, (int)Position.Y, Texture.Width, Texture.Height)))
                {

                    c = 0;
                }
                else
                {
                    c = 1;
                }
            }

            if (c == 1)
            {
                Position.X += Speed;
            }

        }

每个块位置等于我可以通过单击屏幕创建的块,然后将新块位置放入列表中。基本上,我的 BlockPosition 列表中有一个块坐标列表。然后我传递每个块位置的条件,条件为每个块位置创建一个矩形,为玩家创建一个矩形......如果发生碰撞,玩家将不会朝那个方向移动。当我尝试代码时,我的角色只会与列表的第一个元素而不是其他元素发生碰撞,如果我删除第一个元素,它将与下一个元素发生碰撞,但不会与其他元素发生碰撞。所有变量都很好我知道,因为我试图用这样的东西替换这段代码:

if (keyboardState.IsKeyDown(Keys.Right))
        {
            for (int i = GlobalClass.BlocksPositions.Count - 1; i > 0; i--)
            {
                if (new Rectangle((int)GlobalClass.BlocksPositions[i].X, (int)GlobalClass.BlocksPositions[i].Y, bT.Width, bT.Height).Intersects(new Rectangle((int)Position.X, (int)Position.Y, Texture.Width, Texture.Height)))
                {
                    GlobalClass.BlocksPositions.RemoveAt[i];

                }
            }
        }

同样的事情,但是如果它发生碰撞,我会删除列表的元素,这是相同的条件,但是当我尝试它时,它会检测到所有元素并删除我触摸的元素。我尝试了 foreach 函数,得到了相同的结果。怎么了?我已经用 dos 变量做了很多事情所以我确信问题不是来自它们的值,而是来自我对它们所做的事情。请帮忙!(:

4

1 回答 1

1

发现我必须像这样打破循环:

if (keyboardState.IsKeyDown(Keys.Right))
    {
        for (int i = GlobalClass.BlocksPositions.Count - 1; i > 0; i--)
        {
            if (new Rectangle((int)GlobalClass.BlocksPositions[i].X, (int)GlobalClass.BlocksPositions[i].Y, bT.Width, bT.Height).Intersects(new Rectangle((int)Position.X, (int)Position.Y, Texture.Width, Texture.Height)))
            {

                c = 0;
                break;
            }
            else
            {
                c = 1;
            }
        }

        if (c == 1)
        {
            Position.X += Speed;
        }

    }
于 2011-08-07T00:40:02.297 回答