Я кодирую игру с помощью LibGdx, и у меня есть массив со всеми моими стеновыми объектами, с которыми игрок может столкнуться. Для тех, кто не использует LibGdx, я говорю о классе Array от LibGdx, который обеспечивает те же функции, что и ArrayList, но он построен с учетом эффективности памяти. Когда я проверяю на столкновение, я, чтобы пройти через каждую стену в массиве и проверить столкновения, как это:Java более эффективный поиск массива
for(Wall w : walls) {
if(w.bounds().contains(player.bounds()) {
// handle collision
}
}
я понял, что это неэффективно, потому что я иду через все стены, даже если эта стена является выключение текущий вид карты. Очевидно, если я проверяю на столкновение со стенами, находящимися сейчас в окне просмотра камеры (это означает, что они в настоящее время видны игроку), тогда нет смысла проходить через весь массив, потому что игрок не может столкнуться с ними, пока они не войдут в Посмотреть. Я думал о том, чтобы сделать мою игру немного более эффективной, только проверяя на столкновение со стенами рядом с игроком. В моей игре у меня есть все стены, привязанные к сетке с ячейками 32x32 px. Я действительно не знаю, как я мог бы создать более эффективный поиск коллизий. Могу ли я использовать как какую-то карту, которая использует позицию vector2 для своего ключа, а затем просматривает позицию игрока и просматривает стены в определенном диапазоне от позиции игрока на карте? Я просто действительно потерял, как иметь код, который не будет проходить через все 100 стен в моей игре, когда есть только 10 текущих возможных стен, которые игрок мог коснуться из-за того, где он сейчас находится. Есть ли в этом смысл? Может ли кто-нибудь объяснить хороший способ сделать что-то подобное? Спасибо.
Это похоже на хороший подход, но я думаю, что я бы предпочел использовать какую-то структуру данных. Благодарю. –