问题
我正在尝试实现一个数据结构来表示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开始的
x
和y
。如果它们不是从0开始,请考虑使用Map
的Map
(如果结构是矩形的),或者(如果结构不是矩形的)使用带有表示x
和y
坐标的键的对象,例如{
"3_4": <tile correspoding to x of 3, y of 4>
}
如果结构是矩形,则只要先将起始
x
和y
索引添加到查找中,就可以继续使用数组数组,尽管这可能会更难阅读。