0

我有一个平铺系统,其中每个平铺都是 32x32 像素。我正在尝试创建一个函数,其中基于 xy 坐标参数返回平铺类型,但我很难弄清楚如何正确地将 xy 坐标转换为我拥有的 32x32 网格系统。

function getTileAtCoordinates(x, y) {
    if (x < 32) x = 32;
    if (y < 32) y = 32;
    xTile = x;
    xTile = xTile - (x % 32);
    xTile = x / 32;

    yTile = y;
    yTile = yTile - (x % 32);
    yTile = y / 32;


    return getMapTile(xTile, yTile);

}

getMapTile 函数显然从二维数组(x 和 y)中获取瓦片类型。出于某种原因,该函数偶尔会尝试使用十进制值,如果我的数学是正确的,这不应该发生 - 因为十进制值永远不会传递给函数。

编辑:我基本上想要完成的是,如果坐标为 (32, 32),则转换为 (1, 1),而 (65, 33) 将转​​换为 (3, 2)。

4

1 回答 1

0
function getTileAtCoordinates(x, y) {
  return getMapTile(Math.ceil(x/32), Math.ceil(y/32))
}

这是假设您的图块 x 和 y 从 1 开始,而不是从 0。只有坐标 0 返回图块 0。

可适应0-31、32-63等工作

function getTileAtCoordinates(x, y) {
  return getMapTile(Math.floor((x+1)/32), Math.floor((y+1)/32))
}

这将返回坐标 0-31 的瓷砖 0,32-63 的瓷砖 1,等等。

或者,如果您的坐标从 1 开始(1-32、33-64、65-96 等),但您的图块从 0 开始

function getTileAtCoordinates(x, y) {
  return getMapTile(Math.floor((x-1)/32), Math.floor((y-1)/32))
}
于 2012-09-29T01:48:41.840 回答