在图块上显示演员移动范围

Showing actor movement range on tiles

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

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

我无法真正理解的是如何设置它,使其 运行 与移动点一样多。

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

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

这样依次生成所有的第二个邻居,然后递归调用该方法等等...

您需要在方法的顶部进行检查,以便如果剩余的距离点为 0,它会立即将当前图块添加到 neighbours,然后添加到 returns(以停止递归链永远持续下去)。