Как сделать так, чтобы вложенные циклы не увеличивали частоту действий внутри цикла for - PullRequest
0 голосов
/ 28 ноября 2018

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

for(int i = 0; i < enemies.size(); i++) {
    for(int j = 0; j < enemies.size(); j++) {
        if(!enemies.get(i).pureHitbox.intersects(enemies.get(j).pureHitbox) && i != j) {
            enemies.get(i).action();
        }
    }
}

Проблема заключается в том, что действие, выполняемое объектами, увеличивается по частоте на количество объектов в ArrayList.Текущее действие - переместить 3 в любом направлении, но если в ArrayList есть 2, он переместится на 6, если будет 3, переместится на 9 и т. Д.

Я не могу думать ни о какомспособ сделать эту работу эффективно.

Ответы [ 2 ]

0 голосов
/ 28 ноября 2018

Итак, я понял это.Это было очень просто, все, что мне нужно было сделать, это добавить разрыв после того, как он переехал один раз.

0 голосов
/ 28 ноября 2018

Ваша проблема заключается в том, что при поиске пересечения и, например, пересечении A и B, вы выполняете действие дважды ( A пересекает B и B пересекает A ).Все, что вам нужно, это просто проверить, было ли данное действие выполнено для данных A и B или нет.

for(int i = 0, total = enemies.size(); i < total - 1; i++)
    for(int j = i + 1; j < total; j++)
        if(!enemies.get(i).pureHitbox.intersects(enemies.get(j).pureHitbox))
            enemies.get(i).action();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...