Я использую двумерный булевой массив, чтобы проверить, где объект находится внутри моего 2D-скроллера, а также для столкновения. Я знаю, что я не ищу, насколько высока или низкая организация, и это намеренно. Когда я запускаю этот код, он говорит, что ближайший объект находится в 15 ячейках. Однако, когда я запускаю свой код, он говорит, что ближайшая сущность - 15 блоков. Кроме того, когда я распечатать distanceX он печатает следующее: 15. Я не знаю, почему он не зарегистрирует 9, как самое близкое, хотя это первое приблизительное расстояние, которое он получает.Сканирование через 2d булевский массив для поиска ближайшей истинной координаты
Я не могу опубликовать фотографии, однако причина 0,0,2 и 2 печатается, потому что у меня есть 4 прямоугольника во всех четырех углах моего плеера, которые считаются истинными в сетке, поэтому он обнаруживает два верхнюю часть каждого другого и другие 2 или 2 пятна в сетке. Поскольку я не могу загрузить фотографии, попытайтесь понять, что я имею в виду под этим изображением, которое я сделал. https://lh3.googleusercontent.com/OLSDPshjeU0YMahcmc0MDk-NocBMoG-7iN2xFTeFsQ8mAfF-sEPD8NBqXP4ENoN4YWmfUQ=s114
Спасибо за помощь!
//Loop through my grid of booleans
for (int x = 0; x < map.getMapGrid().length; x++) {
for (int y = 0; y < map.getMapGrid().length; y++) {
//For comparison
Long distance = Long.MAX_VALUE;
// The second part of the if statement is to make sure it is checking for
// entities that arent the floor, therefor one above the grid position of the player
if (map.getMapGrid()[x][y] && y > ((Player) player).getGridPositionLeft().y - 1){
// distanceX = where something true was found (x) - where the player is in the grid
// Ex: 1 - 4 = |-3|, there is an entity 3 away
distanceX = Math.abs((int)(x - ((Player) player).getGridPositionLeft().x));
// if the distance of the entity from the player is less then the comparison variable,
// the closest entity x coordinate is distanceX
if(distanceX < distance){
closestCoord.x = distanceX;
closestCoord.y = 0;
}
}
}
}
return closestCoord;
}
Я попробую это – Luke
Я сделал это, и теперь он говорит, что ближайшая сущность - это 0 ячеек, потому что это именно то, где мой игрок, знаете ли вы, как я могу исключить этот результат из моего ответа, не отрицая вообще 0? – Luke
Если в игре нет ни одного объекта, вы можете добавить условие, что * x * и * y * не могут быть равны координатам игрока. В противном случае вам нужно будет узнать, существует ли сущность точно в том же месте, что и у игрока, и я не вижу, как это можно сделать, глядя на код, который вы опубликовали. – tom