我有一个平铺系统,每个平铺都是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)。
答案 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))
}