向下舍入到最接近的倍数

时间:2012-09-29 01:30:31

标签: javascript game-engine

我有一个平铺系统,每个平铺都是32x32像素。我正在尝试根据x y坐标参数创建一个返回tile类型的函数,但是我很难弄清楚如何正确地将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函数显然从2维数组(x和y)获取tile类型。由于某种原因,该函数偶尔会尝试使用十进制值,如果我的数学是正确的,则不应该发生 - 因为十进制值永远不会传递给函数。

编辑:我基本上要完成的是坐标是(32,32)然后转换为(1,1),而(65,33)会转换为(3,2)。

1 个答案:

答案 0 :(得分:0)

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

这假设您的tile x和y以1开头,而不是0.只有坐标0返回tile 0。

它可以适应0-31,32-63等工作

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

对于coord 0-31,tile 1为32-63等返回tile 0

或者,如果你的坐标从1开始(1-32,33-64,65-96等),但你的瓷砖从0开始

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