C#XNA阵列移除

C#XNA阵列移除,c#,arrays,methods,xna,C#,Arrays,Methods,Xna,我想做一个简单的破砖游戏。我用碰撞和简单的物理创造了一切。球从球拍和墙壁上弹回,但我的砖块有问题。我可以让球从砖块上弹下来,我只是没有足够的经验知道如何让砖块消失。砖块排成一排。是否有某种方法可以删除数组的块/特定索引 这就是我创建块的方式 int blockCount=0; for (int x = 0; x < 8; x++) { for (int y = 0; y < 5; y++)

我想做一个简单的破砖游戏。我用碰撞和简单的物理创造了一切。球从球拍和墙壁上弹回,但我的砖块有问题。我可以让球从砖块上弹下来,我只是没有足够的经验知道如何让砖块消失。砖块排成一排。是否有某种方法可以删除数组的块/特定索引

这就是我创建块的方式

        int blockCount=0;

        for (int x = 0; x < 8; x++)
        {
            for (int y = 0; y < 5; y++)
            {
                blocks[blockCount] = Content.Load<Texture2D>("Block");
                blocksPosition[blockCount].X = 95 + (x * 75);
                blocksPosition[blockCount].Y = 20 + (y * 50);
                blockCount++;
            }
        }
int blockCount=0;
对于(int x=0;x<8;x++)
{
对于(int y=0;y<5;y++)
{
blocks[blockCount]=Content.Load(“Block”);
blocksPosition[blockCount].X=95+(X*75);
blocksPosition[blockCount].Y=20+(Y*50);
blockCount++;
}
}
这就是我如何进行碰撞以及如何执行砖块移除

    public void DetectBlockBallCollision()
    {
        for (int i = 0; i<40; i++)
        {
            if ((ballPosition.Y + ball.Height) >= blocksPosition[i].Y &&
                (ballPosition.Y + ball.Height) < (blocksPosition[i].Y+75) &&
                (ballPosition.X + ball.Width) > blocksPosition[i].X &&
                ballPosition.X < (blocksPosition[i].X + blocks[i].Width))
            {
                movingUp = false;
                //whatever would get rid of block;
            }

        }

    }
public void DetectBlockBallCollision()
{
对于(int i=0;i=blocksPosition[i].Y&&
(球位置Y+球高度)<(方块位置[i].Y+75)&&
(ballPosition.X+ball.Width)>blocks位置[i].X&&
ballPosition.X<(方块位置[i].X+方块[i].宽度)
{
movingUp=false;
//无论什么都能摆脱积木;
}
}
}
  • 不要在循环中加载纹理,只在LoadContent中加载一次
  • 将适当的Active(正如TyCobb建议的)放在brick元素中,并在collison中将其设置为true,然后将其移除到循环之外的某个地方

    bricks.removeAll(b=>!(b.active))


  • 通过不同的属性,你的砖块可以有健康,可摧毁的属性,掉落物品的砖块

    二维数组用于按网格对齐块。块将通过在X和Y方向上具有固定像素步长的网格单元坐标排列,位置定义为(col*step_X,row*step_Y)。然后,对于int值为0的数组,表示没有块,非零值表示块寄存器中的块ID。该寄存器应保持该块所有单元(具有相同ID)的公共数据。这种方法最适合一次命中就可以摧毁的方块。为了更耐用,可以使用同一整体砌块的多个变体,例如,如果砖块(1 HP)ID=1,石块(2 HP)ID=2表示未损坏,ID=3表示损坏,3/2/1 HP的铁块ID=4/5/6等等。然后需要将数组中的单位集删除为0


    第二种方法是使用列表。块应以对象的形式表示,每个对象都知道其坐标、最大和当前HP、特殊状态等。好处是,当你点击它时,它的HP变为0,你可以从列表中删除块。

    我只需要在砖块上创建一个
    活动的
    可见的
    属性,然后用它来确定是否绘制它和/或计算它的碰撞。您还可以将元素设置为
    null
    并检查循环中的null。谢谢,这非常有帮助。