在图块上显示演员移动范围
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(以停止递归链永远持续下去)。
我正在尝试编写一些东西,它将采用 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(以停止递归链永远持续下去)。