XNA / C#编辑列表<>从另一个班级

时间:2016-10-24 15:02:19

标签: c# xna-4.0

我在课堂上有一个项目,我决定在XNA中制作一个DX Ball游戏,并且相处得很好,但现在我被卡住了。

我已经创建了一个" brick"的列表,这是一个矩形,我的精灵被定位并让我的球碰撞。 我有一个想法让所有的球逻辑都在球类中,所以现在我需要帮助的有趣部分。当球与其中一个砖碰撞时,如何编辑此列表。我想删除已被击中的砖块,我认为这样就可以了,因为它们被宣布为具有单独坐标的单独砖块。

我找到了这个问题,它回答了如何从列表中获取内容而不是如何编辑它的部分。 Access List from another class

我正在考虑在球更新字段中编写布尔函数,因为每次更新帧时我都不需要它来计算。当碰撞为真时,它可以调整遍历砖块列表的函数并删除球击中的那个。

我不确定我需要在我的球类中展示什么,以便稍后可能会有一些。

 public struct BoundingBrick
 {
     public Vector2 brickPosision;
     public double BrickW;
     public double BrickH;

 }     

 public BoundingBrick boundingBrick = new BoundingBrick();

 boundingBrick.BrickW = 50;
 boundingBrick.BrickH = 20;
 boundingBrick.brickPosision.X = 50;
 boundingBrick.brickPosision.Y = 50;

 bricks = new List<Rectangle>();

        for (var i = 0; i < 14; i++)
        {
            for (var j = 0; j < 12; j++)
            {
                 bricks.Add(new Rectangle((int)boundingBrick.brickPosision.X + j * 50, (int)boundingBrick.brickPosision.Y + i * 20, (int)boundingBrick.BrickW, (int)boundingBrick.BrickH));
            }
        }

1 个答案:

答案 0 :(得分:0)

我做到了这一点:

列出砖块 矩形球;

foreach (BoundingBrick brick in bricks.ToArray())
    {                       
         if (ball.rect.Intersects(brick.rect))
         {
            ball.CollideEffect();
            brick.TakeDamage();
         } 
    }

和砖块中的TakeDamage类:

public void TakeDamage(List<BoundingBrick> bricks)
{
      lives -= 1;
      if (lives <= 0)
      {
            bricks.remove(this)        
      }  
}

'ToArray()'部分将阻止它在列表中崩溃。

相关问题