Brickbreaker C # (обнаружение столкновения шара с кирпичом)

В настоящее время я создаю клон кирпича (да, еще один) и имею столкновение мяч-кирпич для 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;
}

person Dom Tory    schedule 10.12.2014    source источник
comment
Пожалуйста, разместите код в виде текста, а не изображения.   -  person D Stanley    schedule 10.12.2014
comment
@D Stanley Woops очень сожалеет, я не хотел опубликовать изображение, ха-ха!   -  person Dom Tory    schedule 10.12.2014
comment
Думаю, здесь мы упускаем какой-то код. У вас должна быть куча кирпичей, так почему я не вижу picBrk[i] вместо pcBrk1 (например) в вашем состоянии? РЕДАКТИРОВАТЬ: nvm, у вас всего 5 кирпичей. Что ж, вам следует начать с помещения их в список и зациклить его: p   -  person Kilazur    schedule 10.12.2014


Ответы (1)


Вы должны четко определить местонахождение ваших кирпичей. Я предлагаю добавить свойство UpperLeft в ваш класс Brick:

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
person Lau Lu    schedule 10.12.2014