我正在为地图上的某些“元素”构建移动逻辑。 我有他们的X和Y位置定义的瓷砖,现在我需要为瓷砖分配一个元素。 在通用术语中我想做这样的事情:[0,1] => ElementX,然后将其存储到“某事”中。
但是对于JavaScript数组,我不能做“某事”.indexOf [0,1]或ElementX(它的对象)或事件ElementXId。
所以我最终做的是:
TileVector["" + x + y] = [x,y] //translates to TileVector["6060"] = [60,60]
和
TileElementVector["" + x + y] = ElementX;
现在,当我想看到特定坐标上的内容时,我只是将x和y坐标串起来。
我只是想知道这有多糟糕或多慢,以及是否有其他解决方案。
谢谢。
我将详细说明如何使用它。 创建200乘200的地图,其中包含1px的平铺。为了将每个磁贴映射到一个特定的id(为了快速访问),我创建了一个这样的数组:TileVector [“”+ x + y] = [x + y] 指出这不是防弹的
现在当一个元素被放置在地图上时,我需要将该元素与地图上的那个位置相关联,因此[x + y] =>元素并将其存储在一个全新的数组中。
答案 0 :(得分:0)
以下是什么问题?
TileElementVector[x][y]
您必须初始化数组的两个维度,如下所示:
TileElementVector = [];
for (var i = 0; i < maxY; i++){
TileElementVector[i] = [];
}
其中maxY
只是Y在这个假设的2-D网格中可以采用的最大值。
就速度而言,这都不是真正的问题。但是如果你真的想要一维地存储数组,你可以使用这个简洁的数学技巧:
TileElementVector[x * maxY + y]
这将确保每个元素都获得唯一索引。这基本上是“扁平化”#34;数组。但是,由于使用起来有点棘手,我建议使用第一种解决方案。
答案 1 :(得分:0)
function toIndex(x, y, rowSize) {
return y * rowSize + x;
}
function fromIndex(idx, rowSize) {
return {
x: idx % rowSize,
y: Math.floor(idx / rowSize)
};
}
var colSize, rowSize;
var TileElementVector = new Array(colSize * rowSize);
var tileIdx = toIndex(xTile, yTile, rowSize);
var coords = fromIndex(tileIdx, rowSize);
coords.x == xTile && coords.y == yTile;