问题
我试图在p5.js中实现一个数据结构来表示图块的地图,但是在JavaScript中,我无法创建一个固定大小的2D数组,这对于在恒定时间内进行搜索非常理想。
当前,这只是一个简单的一维数组,按从上一行到下一行的顺序存储所有切片对象。实现如下所示。
我想要一个解决方案,用于从特定坐标中抓取一个瓦片对象,而不必搜索每个瓦片,直到瓦片对象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对象,因此我可以在搜索时创建坐标对象,但无法弄清楚。
答案 0 :(得分:0)
使用数组数组代替,外部数组用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
。
这取决于您所质疑的x
和y
从0开始。如果它们不是从0开始,请考虑使用Map
个Map
(如果结构是矩形),或者(如果结构不是矩形)使用带有表示{{ 1}}和x
坐标,例如
y
如果结构是矩形,则只要继续将起始{
"3_4": <tile correspoding to x of 3, y of 4>
}
和x
标记添加到查找中,就可以继续使用数组数组,尽管这可能会有点困难阅读。