3

タイル64x32でアイソメマップを描画します:

const Offset = 160;
int X, Y;

for (int a=0; a < 6; a++)
 for (int b=0; b < 6; b++) {
X = a * 32 - b * 32 + Offset;
Y = a * 16 + b * 16;
DrawTile(X, Y, tile);
 }

このコードを示す画像:http: //i.imgur.com/tgCxF.png

親愛なる専門家の皆様、セルのアイソメトリックインデックスでのマウス座標の変換式を手伝ってください。例:(105; 100)-> [1; 4]。

ありがとう。

PS 私の悪い英語を許してください。私はただ学んでいます...

4

1 に答える 1

3

2つの基底ベクトルp=(32,16)とq =(-32,16)があります。任意のベクトルrは、pとqの線形結合です。

r = a * p + b * q
components:
rx = a * 32 - b * 32 = (a - b) * 32
ry = a * 16 + b * 16 = (a + b) * 16
so your indexes are:
a = (2 * ry  + rx) div 64
b = (2 * ry  - rx) div 64
(div is integer division)

追加: 中央のトップポイントを座標ゼロとして使用し、オフセットを考慮していることに注意してください

于 2012-08-20T09:57:19.817 に答える