我刚刚学习 XNA 并开始制作一个简单的 Break The Blocks 游戏。我正在使用二维数组来表示屏幕顶部的块
bricks = new Bricks[18,16];
for (int y = 0; y < 16; y++)
{
for(int x = 0; x < 18; x++)
{
bricks[x, y] = new Bricks(BrickTexture, new Rectangle(x * BrickTexture.Width, y * BrickTexture.Height, 38, 18), Color.Red);
if (y == 2 || y == 3)
{
bricks[x, y] = new Bricks(BrickTexture, new Rectangle(x * BrickTexture.Width, y * BrickTexture.Height, 38, 18), Color.Blue);
}
if (y == 4 || y == 5)
{
bricks[x, y] = new Bricks(BrickTexture, new Rectangle(x * BrickTexture.Width, y * BrickTexture.Height, 38, 18), Color.Green);
}
if (y == 6 || y == 7)
{
bricks[x, y] = new Bricks(BrickTexture, new Rectangle(x * BrickTexture.Width, y * BrickTexture.Height, 38, 18), Color.White);
}
if (y == 8 || y == 9)
{
bricks[x, y] = new Bricks(BrickTexture, new Rectangle(x * BrickTexture.Width, y * BrickTexture.Height, 38, 18), Color.Pink);
}
if (y == 10 || y == 11)
{
bricks[x, y] = new Bricks(BrickTexture, new Rectangle(x * BrickTexture.Width, y * BrickTexture.Height, 38, 18), Color.Purple);
}
if (y == 12 || y == 13)
{
bricks[x, y] = new Bricks(BrickTexture, new Rectangle(x * BrickTexture.Width, y * BrickTexture.Height, 38, 18), Color.Navy);
}
}
}
这就是构建块的方式,并使用 foreeach 循环将它们绘制到屏幕上。
foreach (Bricks brick in bricks)
{
brick.Draw(spriteBatch);
}
在我的更新方法中,我为每个循环使用另一个循环并检查球是否与其中任何一个发生碰撞,以及他们是否必须从屏幕上移除砖块。为此,碰撞方法如下。
foreach (Bricks brick in bricks)
{
brick.CheckBrickBallCollision(ball);
}
public void CheckBrickBallCollision(Ball ball)
{
if (isVisible && ball.Ball2.Intersects(position))
{
isVisible = false;
ball.direction.X *= 0.85f;
ball.direction.Y *= -1;
}
}
我的问题是如何做到这一点,一旦所有的积木都消失了,游戏就获胜了,然后通过改变游戏状态,就会出现一个获胜的画面。
任何想法都会非常有帮助