【问题标题】:Showing actor movement range on tiles在瓷砖上显示演员的移动范围
【发布时间】:2016-01-27 02:25:45
【问题描述】:

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

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

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

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

【问题讨论】:

  • 您想研究 dijkstra 算法。您只需从起始节点/图块/单元格继续扩展,直到到达一定距离内的所有图块。

标签: java libgdx path-finding tiled


【解决方案1】:

听起来像是recursion 的案例。我看不到您如何跟踪移动点,但您当前的方法可以找到 1 距离之外的所有图块。在此方法中,您需要调用相同的方法,但将这些邻居中的每一个作为您的新起点,并将移动点减少 1。

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

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

【讨论】:

    猜你喜欢
    • 2012-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-19
    • 2012-05-26
    • 1970-01-01
    相关资源
    最近更新 更多