Итак, я создал метод, который обнаруживает столкновение шара BallView с прямоугольным прямоугольником. Я разбил его на 4 части; он обнаруживает столкновение между самой вершиной круга, очень слева от круга, самой нижней частью круга и самой правой частью круга, и прямоугольником. Две из тех работ, которые обнаруживают столкновение между левой точкой на круге и прямоугольником и обнаруживают столкновение между правой точкой на круге и прямоугольником. Но, что не будет работать, если самая верхняя точка или самая нижняя точка касаются прямоугольника, коллизия не обнаружена, как я могу видеть, когда я записываю оператор if, чтобы узнать, введен ли он. Вот мой код (метод .getR() получает радиус окружности):Обнаружение столкновений точек и прямоугольников?
public boolean intersects(BallView ball, Rectangle rect){
boolean intersects = false;
//Left point
if (ball.getX() - ball.getR() >= rect.getTheLeft() &&
ball.getX() - ball.getR()<= rect.getTheRight() &&
ball.getY() <= rect.getTheBottom() &&
ball.getY() >= rect.getTheTop())
{
intersects = true;
}
//Right point
if (ball.getX() + ball.getR() >= rect.getTheLeft() &&
ball.getX() + ball.getR() <= rect.getTheRight() &&
ball.getY() <= rect.getTheBottom() &&
ball.getY() >= rect.getTheTop())
{
intersects = true;
}
//Bottom point (wont work?)
if (ball.getX() >= rect.getTheLeft() &&
ball.getX() <= rect.getTheRight() &&
ball.getY() + ball.getR() <= rect.getTheBottom() &&
ball.getY() + ball.getR()>= rect.getTheTop())
{
intersects = true;
}
//Top point (wont work?)
if (ball.getX() >= rect.getTheLeft() &&
ball.getX() <= rect.getTheRight() &&
ball.getY() - ball.getR()<= rect.getTheBottom() &&
ball.getY() - ball.getR()>= rect.getTheTop())
{
intersects = true;
}
return intersects;
}
я принял во внимание, что Y возрастает по мере перехода вниз и X увеличивается, как вы идете прямо. Почему этот метод не обнаруживает пересечение верхней и нижней точек на краю круга? Кроме того, экран ориентирован на ландшафт.
благодарственное вы теперь отлично работаете, но мне пришлось внести два изменения: 'ball.getY() + ball.getR() <= rect.getTheBottom()' и 'ball.getY() + ball.getR()> = rect .getTheTop() 'Thnak you! –
Рад, что вы его работаете, логике всегда интересно попробовать и отладить – Vorzak3