Перенос с экранных координат на карту
|
Как получить координаты мыши на карте, это уже особая проблема. По крайней мере для меня. Я затратил на это некоторое время, придумывая "хитрые идеи" ... в конце концов, я использовал два линейных уравнения.
Мы будем обращаться с вращаемыми x-y оси как с линиями, и проверять, где они пересекаются с экранными осями. Я использую мировые координаты (представьте полную карту, выведенную в ОЧЕНЬ БОЛЬШОМ буфере за экраном. Каждая точка имеет теперь уникальные координаты ..., это - то, что я называю мировые координаты), и вычисляю соответствующие координаты карты только когда необходимо (прокрутка, проверка на пересечение).
Допустим, что ваши (наземные) клетки - 32x16. Я назову половину ширины как q и половину высоты как
p. Это дает нам наклон m как p/q = 0.5 для изометрической оси
y, (-m) для x оси.
W0x - точка где линия пересекает ось x: W0x=(map
height)*q
Поэтому, для нашей [3/3] карты, W0x = 48.
W0y - точка где x координата линий - нуль:
W0y=0-m*W0x
Поэтому, W0y = -24.
Линия определена как
y=mx+b -
b=y-mx -
x=(y-b)/m
Допустим, есть карта 3/3 с клетками 32x16, и возьмем точку P
(x=48/y=8), которая находится в центре карты (0/0).
xm + y
( ------- - W0x ) / (2q) = x'
m
48*0.5 + 8
32
( ------------- - 48) / (32) = (----- - 48) / 32 = (64-48)/32 = 0.5
0.5
0.5
Теперь, у - координата равна:
| (y- mx) - W0y | | 8 - 0.5*48 - (-24) |
y'= ----------------- = ----------------------
2p
16
8
y'= -- = 0.5
16
Lennart Steinke (lennart_steinke@bigfoot.com)
|
[ главная ] [ Общеигровые статьи на GDsW ] [ DirectX ] [ Статьи по графике ] [ Статьи по AI ] [ Юмор ]
|