Вы поменяли источник и пункт назначения. В image
первая прямоугольная область (параметры 2 -5) определяет место назначения в окне, а вторая прямоугольная область (параметры 6 - 9) определяет исходный прямоугольник на изображении (tileset
):
image(tileset, sx, sy, tilesize, tilesize, dx, dy, tilesize, tilesize);
image(tileset, dx, dy, tilesize, tilesize, sx, sy, tilesize, tilesize);
Поскольку сетка назначения и источник tileset
имеют разное количество столбцов, функция drawTiles
нуждается в 2 столбцахпараметры (d_cols
, c_cols
):
function draw() {
background(0);
drawTiles(map, 3, 2, 11);
}
function drawTiles(map, d_cols, s_cols, tilesize) {
for (let i = map.length - 1; i > -1; --i) {
let value = map[i];
// source x , y
let sx = (value % s_cols) * tilesize;
let sy = Math.floor(value / s_cols) * tilesize;
// distenation x , y
let dx = (i % d_cols) * tilesize;
let dy = Math.floor(i / d_cols) * tilesize;
// render image
image(tileset, dx, dy, tilesize, tilesize, sx, sy, tilesize, tilesize);
}
}