Я пытаюсь записывать каждый раз, когда мои спрайты сталкиваются друг с другом.К сожалению, мое текущее решение, похоже, добавляет к счету больше коллизий, чем необходимо, и я не понимаю, почему.
Я пробовал много разных форм отслеживания коллизий, но все они в конечном итоге страдают одним и тем же недостатком: они считаютстолкновений, которые не произошли.Мое текущее решение будет учитывать 10 коллизий, если их не произойдет, что значительно точнее, чем предыдущие методы, но недостаточно точно для моих нужд.
Вот прямоугольник, который я использую для проверки коллизий:
public Rectangle getBounds() {
if (rotate){
return new Rectangle((int) x, (int) y, 60, 40);
}else{
return new Rectangle((int) x, (int) y, 40, 60);
}
}
Вот мой метод collisionCheck () с использованием .intersects:
Rectangle r2 = null;
public void checkCollisions(){
for (Iterator<SimpleSprite> it = Carpaint.Cars.iterator(); it.hasNext();) {
Carpaint c = (Carpaint) it.next();
if (c.dx > 0 || c.dy > 0){
Rectangle r1 = c.getBounds();
System.out.println(r1);
if (r2 != null){
if (r1.intersects(r2) && r2.intersects(r2)){
Carpaint.collisions ++;
System.out.println("Car r1: " + r1 + "collided with Car r2" + r2);
}
}
r2 = r1;
System.out.println(r2);
}
}
}
И он вызывается каждые 50 миллисекунд к
public void actionPerformed(ActionEvent arg0) {
checkCollisions();
Когда я запускал программу в течение 3 секунд, яЯ мог видеть, что ничего не должно произойти, однако каждый раз, когда я проверял это, я получал 10 или более результатов.Как я могу это исправить?
РЕДАКТИРОВАТЬ: Изменен код, чтобы исправить ошибку;сейчас
if (r1.intersects(r2) && r2.intersects(r1)){
Однако результат все тот же