2015-12-18 6 views
-2

Рассмотрите наличие ArrayList<Rectangle> rectangles = new ArrayList(); и класса игрока, который имеет переменную прямоугольника, Character c = new Character(new Rectangle(x,y,w,h));. Класс символов имеет update() так:Обнаружение попадания прямоугольника Java

public void update(){ 
rectangle.x = rectangle.x + xSpeed; 
rectangle.y = rectangle.y + ySpeed; 
} 

Где xSpeed & ySpeed постоянно меняется и update() постоянно называются.

Как правильно проверить, пересекаются ли прямоугольник символов и любой прямоугольник в ArrayList, и если это предотвратит перемещение символьного прямоугольника?

+1

Кажется, вы даже не пытались это сделать, взглядом вашего кода. Пожалуйста, приложите еще несколько усилий. Это не пошаговый сайт. Вернитесь назад, когда у вас возникнет конкретная проблема. –

ответ

0

Посмотрите на API прямоугольника, вы увидите метод пересечений (Rectangle r), который вы можете использовать. Intersects Method

Вы можете проверить наличие коллизий каждое обновление, используя цикл для сравнения вашего объекта со всеми прямоугольниками объектов в ArrayList. Если метод возвращает true, тогда вы обрабатываете столкновение, как вам нравится.

+0

Да, я знаю об этом, но я понимаю, что существует определенный способ обработки обнаружения попадания в игре, чтобы предотвратить использование метода обновления прямоугольника. – TheBoxOkay

+0

. Вам необходимо обновить, прежде чем рисовать , И прежде чем принимать обновленные результаты, вы проверяете столкновение. Создайте временные обновленные значения x и y, затем проверьте наличие коллизий, если их нет, тогда вы установите реальные x и y на временные позиции. Вам нужно сделать еще один цикл для сравнения текущего объекта со всеми другими объектами. Кроме того, вы можете вручную проверять края всех прямоугольников на все остальные. Но это только для конкретного использования, и я не знаю, как ваши объекты должны реагировать. – Sterls