Почему моя программа считает слишком много коллизий? - PullRequest
0 голосов
/ 10 мая 2019

Я пытаюсь записывать каждый раз, когда мои спрайты сталкиваются друг с другом.К сожалению, мое текущее решение, похоже, добавляет к счету больше коллизий, чем необходимо, и я не понимаю, почему.

Я пробовал много разных форм отслеживания коллизий, но все они в конечном итоге страдают одним и тем же недостатком: они считаютстолкновений, которые не произошли.Мое текущее решение будет учитывать 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)){

Однако результат все тот же

...