【问题标题】:Brickbreaker C# (ball-brick collision detection)Brickbreaker C#(球砖碰撞检测)
【发布时间】:2014-12-11 01:02:34
【问题描述】:

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

【问题讨论】:

  • 请将代码发布为文本,而不是图像。
  • @D Stanley Woops 非常抱歉,我不是故意发图片哈哈!
  • 我想我们在这里遗漏了一些代码。你应该有一堆砖头,那为什么我在你的情况下没有看到picBrk[i] 而不是pcBrk1(例如)?编辑:nvm,你总共有 5 块砖。那么你应该首先将它们放在一个列表中并循环它:p

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


【解决方案1】:

您需要非常清楚您的积木的本地化。 我建议在你的 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-01
    • 1970-01-01
    • 2015-10-06
    • 2013-01-26
    相关资源
    最近更新 更多