问题

我正在尝试实现一个数据结构来表示p5.js中的图块 map ,但是在JavaScript中,我无法设置固定大小的2D数组,这对于在恒定时间内进行搜索非常理想。

当前,它只是一个简单的一维数组,按从上一行到下一行的顺序存储所有 slice 对象。实现如下所示。

我想要一个从特定坐标中获取图块对象的解决方案,而不必搜索每个图块,直到图块对象x和y匹配我要搜索的对象为止。

这是我对网格的实现:

this.tiles = [];

for(x = 0; x < this.canvasWidth; x += this.tileWidth) {
  for(y = 0; y < this.canvasHeight; y += this.tileHeight) {
    var tile = new Tile(x, y, this.tileWidth, this.tileHeight)
    this.tiles.push(tile);
  }
}

我尝试过的方法

我尝试使用字典类型的结构来实现它,该结构将坐标对象映射到tile对象,因此我可以在搜索时创建坐标对象,但无法弄清楚。

最佳答案

使用数组数组代替,外部数组由x索引,内部数组由y索引,内部数组的值是tile:

this.tiles = [];
for(x = 0; x < this.canvasWidth; x += this.tileWidth) {
  const xArr = [];
  for(y = 0; y < this.canvasHeight; y += this.tileHeight) {
    var tile = new Tile(x, y, this.tileWidth, this.tileHeight)
    xArr.push(tile);
  }
  this.tiles.push(xArr);
}

然后,例如
this.tiles[3][6]

将使用Tile为3且x为6来引用y

这取决于您的问题,从0开始的xy。如果它们不是从0开始,请考虑使用MapMap(如果结构是矩形的),或者(如果结构不是矩形的)使用带有表示xy坐标的键的对象,例如
{
  "3_4": <tile correspoding to x of 3, y of 4>
}

如果结构是矩形,则只要先将起始xy索引添加到查找中,就可以继续使用数组数组,尽管这可能会更难阅读。

09-10 00:21
查看更多