拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 从Javascript中的数字阵列回传坐标(x,y)

从Javascript中的数字阵列回传坐标(x,y)

白鹭 - 2022-01-24 2101 0 0

我正在尝试使用 Javascript 在 2d 自上而下的视图游戏中制作碰撞贴图。我正在使用 Tiled 来构建地图。Tiled 生成一个 json/javascript 档案,其中包含我地图中每个元素的阵列。我可以为每个 tile 设定一个布林值,因此那些设定为 true 的将在阵列中显示为 1,而那些设定为 false 的将回传 0。

现在我想将这些资料输出为 x,y 坐标。我的意思是如果我有阵列 [0,0,0,0] 我想要那些输出像 (x,y) (0,0), (1,0), (2,0), (3,0)基于 tilemap 阵列的宽度和高度。像这样的东西:

"data":[0,0,0,0,
        1,1,1,1,
        0,0,0,0,
        0,0,0,0]
"height":4,
"width":4,
"x":0,
"y":0

我的问题是我不知道如何对我的回圈说将有四列和四行并且索引应该从 (0,0), (0,1), (0,2), (0 ,3) 到 (1,0), (1,1),(1,2),(1,3) 结束后第一行继续直到最后一列。

任何的想法?

uj5u.com热心网友回复:

您可以分别为当前row使用两个 for 回圈col

const tiledOutputJson = {
    "data": [
        0, 0, 0, 0,
        1, 1, 1, 1,
        0, 0, 0, 0,
        0, 0, 0, 0
    ],
    "height": 4,
    "width": 4,
    "x": 0,
    "y": 0
};

const { data, height, width, x, y } = tiledOutputJson;

for (let row = 0; row < height; row  ) {
    for (let col = 0; col < width; col  ) {
        console.log(`(${row}, ${col}) = ${data[row * height   col]}`);
    }
    console.log();
}

uj5u.com热心网友回复:

一般来说,我建议将其设为 x 的阵列,其中包含 y 的阵列

[
[0,0,0,0],
[1,1,1,1],
[0,0,0,0],
]

你可以像这样进行映射

const data = {
  "data": [0, 0, 0, 0,
    1, 1, 1, 1,
    0, 0, 0, 0,
    0, 0, 0, 0
  ],
  "height": 4,
  "width": 4,
  "x": 0,
  "y": 0
}

for (let x = 0; x < data.height * data.width; x = x   data.width) {
  for (let y = x; y < data.width   x; y  ) {
    console.log({
      x: x / data.height,
      y: y % data.width,
      v: data.data[y]
    })
  }
}

标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *