2012-09-29 45 views
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函數顯然是從2維數組(x和y)獲取tile類型。出於某種原因,該函數偶爾會嘗試使用十進制值,如果我的數學正確不應該發生 - 因爲十進制值永遠不會傳遞給函數。 (32,32)然後轉換爲(1,1)和(65,33)將轉換爲(3,2)。我想要完成的是如果座標是(32,32)。

+0

你是怎麼調用這個函數的? – 0x499602D2

+0

如果十進制值的整數部分是正確的,你可能會明確地將其轉換爲一個整數,而不用擔心它...... – Perkins

+0

@David我用玩家的x和y座標來調用函數,這會都是正整數。 –

回答

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座標0-31,32-63爲1瓦,等

或者,如果你的座標,從1開始(1-32,33-64,65-70 96等),但你的瓷磚開始於0

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