在瓷砖上显示演员运动范围

时间:2016-01-27 02:25:46

标签: java libgdx path-finding tiled

我正在尝试编写一些将采用X和Y坐标以及表示所选actor具有的可用移动点的值。然后它应该输出一个可到达位置的列表,这样当演员选择移动位置时我可以突出显示这些图块。

我设法使用我的路径查找库(https://github.com/xaguzman/pathfinding)中的一个函数,该函数将tile的相邻切片作为网格单元格列表。它还可以检查我的Tile-map并查看该tile是否可以步行。

我无法理解的是我如何能够设置它以便它可以像运动点一样运行多少次。

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));
    }
}

1 个答案:

答案 0 :(得分:0)

听起来像recursion的情况。我无法看到你如何跟踪移动点,但是你当前的方法找到距离1的所有瓷砖。在此方法中,您需要调用相同的方法,但将每个邻居作为新的起点并且移动点减少1.

这反过来会生成所有第二个邻居,然后递归调用该方法,等等......

你需要检查方法的顶部,这样如果距离点为0,它只是立即将当前图块添加到neighbours然后返回(以阻止递归链永远进行)