2015-08-23 2 views
3

Я использую двумерный булевой массив, чтобы проверить, где объект находится внутри моего 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; 
} 

ответ

2
Long distance = Long.MAX_VALUE; 

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

Также он объявлен внутри самого внутреннего цикла, поэтому он будет сброшен на каждой итерации. Если вы хотите, чтобы значение переменной сохранялось между итерациями, вам нужно объявить и инициализировать ее за пределами петель.

+0

Я попробую это – Luke

+0

Я сделал это, и теперь он говорит, что ближайшая сущность - это 0 ячеек, потому что это именно то, где мой игрок, знаете ли вы, как я могу исключить этот результат из моего ответа, не отрицая вообще 0? – Luke

+0

Если в игре нет ни одного объекта, вы можете добавить условие, что * x * и * y * не могут быть равны координатам игрока. В противном случае вам нужно будет узнать, существует ли сущность точно в том же месте, что и у игрока, и я не вижу, как это можно сделать, глядя на код, который вы опубликовали. – tom