扫描二维布尔数组以找到最接近的真实坐标
Scanning through 2d boolean array to find closest true coordinate
我正在使用二维布尔数组来检查实体在我的二维侧滚动条内的位置以及碰撞。我知道我不是在寻找一个实体有多高或多低,这是故意的。当我 运行 这段代码时,它说最近的实体在 15 个单元格之外。但是,当我 运行 我的代码时,它说最近的实体距离是 15 个街区。另外,当我打印出 distanceX 时,它会打印出以下内容:
9
0
0
2个
2个
15
9
0
0
2个
2个
15. 我不知道为什么它不会将 9 注册为最近的,即使这是它收到的第一个最近的距离。
我还不能 post 图片,但是打印 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;
}
Long distance = Long.MAX_VALUE;
此变量永远不会重新赋值,因此它的值将始终为 Long.MAX_VALUE
。
它也是在最内层循环中声明的,所以它会在每次迭代时重置。如果您希望在迭代之间记住变量的值,您需要在循环外部声明和初始化它。
我正在使用二维布尔数组来检查实体在我的二维侧滚动条内的位置以及碰撞。我知道我不是在寻找一个实体有多高或多低,这是故意的。当我 运行 这段代码时,它说最近的实体在 15 个单元格之外。但是,当我 运行 我的代码时,它说最近的实体距离是 15 个街区。另外,当我打印出 distanceX 时,它会打印出以下内容: 9 0 0 2个 2个 15 9 0 0 2个 2个 15. 我不知道为什么它不会将 9 注册为最近的,即使这是它收到的第一个最近的距离。
我还不能 post 图片,但是打印 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;
}
Long distance = Long.MAX_VALUE;
此变量永远不会重新赋值,因此它的值将始终为 Long.MAX_VALUE
。
它也是在最内层循环中声明的,所以它会在每次迭代时重置。如果您希望在迭代之间记住变量的值,您需要在循环外部声明和初始化它。