Проверка столкновения для каждого куба в ArrayList - PullRequest
1 голос
/ 22 мая 2019

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

public class Cube {

    public int x, y;
    private boolean conflict = false;

    public Cube(int x, int y) {
      this.x = x;
      this.y = y;
    }

    public void moveDown() {
        if(!conflict("down")) {
            this.y += 18;
        }
    }

    public boolean conflict(String dir) {
        if(dir.equals("down")) {
            for(Cube cubes : Panel.cubes) {
                if(this.hashCode() != cubes.hashCode()) {
                    if(this.y + 18 == cubes.y && this.x == cubes.x || this.y >= Main.height - 18*4) {
                        this.conflict = true;
                    } else this.conflict = false;
                }
            }
        }
    }
}

Ответы [ 2 ]

2 голосов
/ 22 мая 2019

Прежде всего ваш конфликтный метод ничего не делает return, мне интересно, как это компилируется.Но проблема в том, что вы никогда не выходите на улицу for loop при обнаружении столкновения.

public boolean conflict(String dir) {
    if (dir.equals("down")) {
        for(Cube cubes : Panel.cubes) {
            if(this.hashCode() != cubes.hashCode()) {
                if(this.y + 18 == cubes.y && this.x == cubes.x || this.y >= Main.height - 18*4) {
                    this.conflict = true;
                    break;
                } else {
                    this.conflict = false;
                }
            }
        }
    }

    return this.conflict;
}
1 голос
/ 22 мая 2019

Похоже, что вы хотите выйти из цикла при обнаружении конфликта, так как в противном случае следующая итерация может сбросить этот флаг (что объясняет, почему "столкновение работает только для последнего куба в массиве").

    if (dir.equals("down")) {
        for(Cube cubes : Panel.cubes) {
            if(this.hashCode() != cubes.hashCode()) {
                if(this.y + 18 == cubes.y && this.x == cubes.x || this.y >= Main.height - 18*4) {
                    this.conflict = true;
                    break;
                } else {
                    this.conflict = false;
                }
            }
        }
    }

Кстати, в вашем conflict методе, похоже, отсутствует оператор возврата.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...