Javascript 在一维或二维阵列中基于平铺的寻路

Javascript 在一维或二维阵列中基于平铺的寻路,javascript,path-finding,tiles-game,Javascript,Path Finding,Tiles Game,据我所知,所有基于平铺的地图编辑器都会导出一个包含一维数组的JSON对象。而大多数寻路库/教程仅针对二维阵列提供 另外,如果我想在这个一维数组中进行寻路,而这个数组很大,我会使用它,这会导致性能问题 那么,为什么大多数基于平铺的地图编辑器都会输出一维地图,我应该如何处理这些关于寻路的问题呢 只需通过谷歌寻路就可以找到所有二维patfhfinding教程,具体取决于转换为一维阵列的方向 function convert(x, y, height, width) { return x +

据我所知,所有基于平铺的地图编辑器都会导出一个包含一维数组的JSON对象。而大多数寻路库/教程仅针对二维阵列提供

另外,如果我想在这个一维数组中进行寻路,而这个数组很大,我会使用它,这会导致性能问题

那么,为什么大多数基于平铺的地图编辑器都会输出一维地图,我应该如何处理这些关于寻路的问题呢


只需通过谷歌寻路就可以找到所有二维patfhfinding教程

,具体取决于转换为一维阵列的方向

function convert(x, y, height, width) {
    return x + y * width;  // rows
    /* return y + x * height; // cols */
}

function reverse(i, height, width) {
    var x, y;
    // rows
    x = i % width
    y = (i - x) / width
    /* // cols
    y = i % height;
    x = (i - y) % height; */
    return [x, y];
}
现在,假设我们有一张6宽3高的地图

         1-D             |                   2-D
 0   1   2   3   4   5   |   x0y0  x1y0  x2y0  x3y0  x4y0  x5y0
 6   7   8   9  10  11   |   x0y1  x1y1  x2y1  x3y1  x4y1  x5y1
12  13  14  15  16  17   |   x0y2  x1y2  x2y2  x3y2  x4y2  x5y2
在一维数组中选择一个索引,例如
i=8
,将其转换为二维坐标,我们可以使用
reverse

reverse(8, 3, 6); // [2, 1]
//      i, h, w   =  [x, y]
或者说我们在二维数组中选取了坐标
x=2,y=1
,我们可以使用
convert

convert(2, 1, 3, 6); // 8
//      x, y, h, w   =  i
一旦您可以在两个系统之间转换,您就可以像平常一样进行路径查找。您可以随意命名这些函数,我编写了更多的函数,以便您可以了解如何在两个系统之间切换


根据它的制作方式,y轴的底部可能有
0
,而不是顶部,或者整个东西可以在对角线上镜像(我在上面的函数中称之为cols)。这实际上取决于转换的方式,但只要您与转换保持一致,并且具有正确的高度和宽度(分别读取最大y和最大x),这应该无关紧要。

一种方法可能是根据磁贴的2D矢量坐标,检索1D阵列中的偏移量:

int MaxX = 100; // assumes a max row of 100;
int offset = Y * MaxX + X;
tile[offset] = ....

无需转换,只需在1D数组中直接引用磁贴即可。在最近的一个游戏项目中,我将这种方法用于A*,并为我工作。

很可能属于其他网站,比如程序员或类似的网站。“程序员Stack Exchange是一个问答网站,面向对软件开发概念性问题感兴趣的专业程序员。”Cross posted:那么你是说我应该将一维数组转换为二维数组?为什么这些平铺编辑器不首先导出二维数组?除非您的算法需要整个数组作为输入,否则您不必转换整个数组。此外,您还可以从中了解到如何修改其他系统的算法(从二维转换为一维比从一维转换为二维便宜)。此外,JavaScript中的一维数组的数据开销较小,这可能是它们导出此类算法的原因。很抱歉,我在处理此问题时遇到了麻烦,所以你们要把一维数组的一部分转换成二维数组?你能在回答中提供一维阵列和二维阵列吗?非常感谢。如果你不介意的话,我有几个小问题:1。我正计划制作一个巨大的基于平铺的地图,并进行大量的路径查找,你建议我将整个一维数组转换为二维数组吗?2.对于基于平铺的游戏创作来说,按照我在第一个问题中提出的要求去做是正常的吗?