破砖机C#(球砖碰撞检测)

时间:2014-12-10 14:55:40

标签: c# visual-studio visual-studio-2013 collision-detection breakout

我目前正在创造一个破砖者克隆(是的,另一个)并且让砖块碰撞1块砖。我还有4个其他砖块被注释掉了,因为当球与砖碰撞时我有正确的代码,它只是移除了所有砖块,而不是它碰撞的特定砖块。此外,当球靠近游戏屏幕的左上角时(相当于实际的砖块),球仅与第一块砖碰撞。我真的不知道该怎么做,我试过把砖块分开一点但是没有帮助。

int score = 0;
if ((ballY > picBrk1.Height) && (ballY < picBrk1.Height + 30) && (ballX > picBrk1.Width) && (ballX < picBrk1.Width + 71))
{
    // ball rebounds off brick
    yChange = -yChange;

    // each brick adds 1 to score
    score = score + 1;
    lblScore.Text = "Score: " + score;

    picBrk1.Visible = false;
}

1 个答案:

答案 0 :(得分:0)

您需要非常清楚砖块的本地化。 我建议在你的Brick类中添加一个UpperLeft属性:

public class Brick
{
    /* your other properties here */

    public Point UpperLeft {get; set;}
}

确保将UpperLeft值正确设置为砖块左上角的坐标。 我的假设是你的X和Y遵循标准的计算机图像表示,其中0,0是图像的左上角,当你向南时,y增加(这与通常的数学标准不同)。 然后你的碰撞检查将是:

Point ballRelativeToBrick1 = new Point(
    ballX - picBrick1.UpperLeft.X,
    ballY - picBrick1.UpperLeft.Y)
bool collide = 0 < ballRelativeToBrick1.X && ballRelativeToBrick1.X < picBrick1.Width
    && 0 < ballRelativeToBrick.Y && ballRelativeToBrick.Y < picBrick1.Height