Cuando está fuera del alcance de la función, Tiles[[]] pierde todos sus valores.
var Tiles= [[]]; function drawGrid(){ Grid=true; // for the amout of rows for (let rowcount = 0; rowcount < amountOfrows; rowcount++) { ctxB.lineWidth = 1; // filling the rows // check for (un)even if(rowcount%2==0){ for (let boxcount = 0; boxcount < amountOfHorBoxes; boxcount++) { ctxB.strokeStyle = "black"; ctxB.fillStyle = "white"; ctxB.beginPath(); ctxB.rect(addHorBox, addVertBox, boxsize, boxsize); ctxB.fill(); ctxB.closePath(); ctxB.stroke(); Tiles[rowcount[boxcount]]={x1: addHorBox, y1: boxsize*rowcount, x2: addHorBox+boxsize, y2: boxsize*(rowcount+1)}; //console.log('Tiles:',Tiles[rowcount[boxcount]]); addHorBox+=boxsize; } }else{ for (let boxcount = 0; boxcount < amountOfHorBoxes; boxcount++) { ctxB.strokeStyle = "black"; ctxB.fillStyle = "white"; ctxB.beginPath(); ctxB.rect(addHorBox+boxsize/2, addVertBox, boxsize, boxsize); ctxB.fill(); ctxB.closePath(); ctxB.stroke(); Tiles[rowcount[boxcount]]={x1: addHorBox, y1: boxsize*rowcount, x2: addHorBox+boxsize, y2: boxsize*(rowcount+1)}; //console.log('Tiles:',Tiles[rowcount[boxcount]]); addHorBox+=boxsize; } } addHorBox=0; addVertBox+=boxsize; } }No he podido verificar completamente si llené la matriz correctamente, pero independientemente, no contiene los valores fuera de su alcance. ¿Cómo hago esto?
En su código, está accediendo a la matriz de mosaicos de esta manera:
Tiles[rowcount[boxcount]]={x1: addHorBox, y1: boxsize*rowcount, x2: addHorBox+boxsize, y2: boxsize*(rowcount+1)}; Entonces, el índice que está utilizando es el valor almacenado en la propiedad boxcount de rowcount , es decir, lo mismo que hacer:
let index = rowcount[boxcount]; Tiles[index]={x1: addHorBox, y1: boxsize*rowcount, x2: addHorBox+boxsize, y2: boxsize*(rowcount+1)}; Dado que el valor de rowcount[boxcount] no está definido, está almacenando su objeto en Tile[undefined] .
Para acceder a la matriz bidimensional, debe hacer esto:
Tiles[rowcount][boxcount]={x1: addHorBox, y1: boxsize*rowcount, x2: addHorBox+boxsize, y2: boxsize*(rowcount+1)}; Además, inicialmente solo tiene una fila disponible, ya que inicializa su matriz de esta manera: Tiles = [[]];
Lo que recomendaría es inicializar Tiles como una matriz vacía: Tiles = [];
Luego, para cada fila, inserte una nueva matriz vacía en Tiles :
for (let rowcount = 0; rowcount < amountOfrows; rowcount++) { ctxB.lineWidth = 1; Tiles.push([]); ... }