碎砖机 C#(球-砖碰撞检测)

本文关键字:碰撞检测 砖机 | 更新日期: 2023-09-27 18:33:54

>我目前正在创建一个破砖机克隆(是的,另一个),并且发生了 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;
}

碎砖机 C#(球-砖碰撞检测)

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

public class Brick
{
    /* your other properties here */
    public Point UpperLeft {get; set;}
}
确保左上角

值正确设置为砖块左上角的坐标。我的假设是,你的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