我的游戏中有2个目标。我正在使用广度优先搜索找到其中一个的路径。我想知道如何使用它们的坐标确定哪个是最近的目标。我有我的目标的X和Y坐标(所有int类型)。
int result = 0;
int target1dist = (playerX - target1x) + (playerY - target1y);
int target2dist = (playerX - target2x) + (playerY - target2y);
if (target1dist < target2dist){
result = BFS(target1x,target1y,playerX ,playerY);
} else {
result = BFS(target2x,target2y,playerX ,playerY);
}
当其中一个目标的距离为负时,这无效。所以我添加了绝对值功能。因此target1dist和target2dist不能为负数。
int target1dist =Math.abs ((playerX - target1x) + (playerY - target1y));
这是否是找到最近目标的有效方法,以便我的AI玩家可以指向它? P.S:我的Ai玩家只能走4个方向,所以排除了对角线。我的另一个想法是用毕达哥拉斯找到距离。
答案 0 :(得分:0)
稍作修改,您的方法应该有效。您不希望获取完整表达式的绝对值,而是每个组件:
int traget1dist = Math.abs(playerX - target1x) + Math.abs(playerY - target1y);
这称为Manhattan distance,是基于磁贴的搜索的常用衡量标准。作为广度优先搜索是guaranteed to find the optimal solution,您的解决方案将起作用。