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) からタイル タイプを取得します。何らかの理由で、関数は時折 10 進数値を使用しようとしますが、10 進数値が関数に渡されることはないため、私の数学が正しければ発生しないはずです。

編集: 私が基本的に達成しようとしているのは、座標が (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 が 0 ではなく 1 で始まると仮定しています。座標 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 に答える