我在课堂上有一个项目,我决定在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));
}
}
答案 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()'部分将阻止它在列表中崩溃。