Java 在瓷砖上显示演员的移动范围

Java 在瓷砖上显示演员的移动范围,java,libgdx,path-finding,tiled,Java,Libgdx,Path Finding,Tiled,我正在尝试写一些东西,这些东西将采用X和Y坐标,以及一个表示所选演员可用移动点的值。然后,它应该输出一个可到达位置的列表,以便在参与者选择移动位置时,我可以突出显示这些分幅 我设法使用了寻路库()中的一个函数,该函数将一个图块的相邻图块作为网格单元列表提供给我。它还可以检查我的瓷砖地图,看看瓷砖是否可以行走 我真正想不起来的是如何设置它,使它运行的次数与运动点的次数一样多 List<GridCell> neighbours; NavigationTiledMapLayer navLa

我正在尝试写一些东西,这些东西将采用X和Y坐标,以及一个表示所选演员可用移动点的值。然后,它应该输出一个可到达位置的列表,以便在参与者选择移动位置时,我可以突出显示这些分幅

我设法使用了寻路库()中的一个函数,该函数将一个图块的相邻图块作为网格单元列表提供给我。它还可以检查我的瓷砖地图,看看瓷砖是否可以行走

我真正想不起来的是如何设置它,使它运行的次数与运动点的次数一样多

List<GridCell> neighbours;
NavigationTiledMapLayer navLayer;

public void getMovementPossibilities(int tileX, int tileY) {
    GridCell cell1;
    GridCell cell2;

    cell1 = navLayer.getCell(tileX, tileY);


    GridFinderOptions opt = new GridFinderOptions();
    opt.allowDiagonal = true;
    opt.dontCrossCorners = false;


    neighbours = navLayer.getNeighbors(cell1, opt);


    for (int i = 0; i < neighbours.size(); i++) {
        int nX = neighbours.get(i).getX();
        int nY = neighbours.get(i).getY();

        cell2 = navLayer.getCell(nX, nY);
        neighbours.addAll(navLayer.getNeighbors(cell2, opt));
    }
}
列出邻居;
导航平铺图层导航图层;
public void getmovementposabilities(int-tileX,int-tileY){
网格细胞1;
网格细胞2;
cell1=navLayer.getCell(tileX,tileY);
GridFinderOptions opt=新的GridFinderOptions();
opt.allowDiagonal=true;
opt.dontCrossCorners=false;
neights=navLayer.getneights(cell1,opt);
对于(int i=0;i<0.size();i++){
intnx=neights.get(i).getX();
int-nY=neights.get(i).getY();
cell2=navLayer.getCell(nX,nY);
addAll(navLayer.getneights(cell2,opt));
}
}
听起来像是一个例子。我看不出您是如何跟踪移动点的,但您当前的方法会在1距离之外找到所有瓷砖。在该方法中,您需要回忆相同的方法,但将每个相邻对象作为新的起点,并且移动点减少1

这将依次生成所有第二个邻居,然后递归调用该方法,以此类推


您需要在方法的顶部进行检查,这样,如果剩余的距离点为0,它只需立即将当前磁贴添加到
邻居中
,然后返回(以停止永远进行的递归链)。

您需要查看dijkstra算法。您只需从起始节点/磁贴/单元继续扩展,直到到达一段距离内的所有磁贴。