Rambler's Top100

 GDsW - Game Developer's World    

.: Перенос с экранных координат на карту :.

 

Перенос с экранных координат на карту

Как получить координаты мыши на карте, это уже особая проблема. По крайней мере для меня. Я затратил на это некоторое время, придумывая "хитрые идеи" ... в конце концов, я использовал два линейных уравнения.

Мы будем обращаться с вращаемыми 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 ] Юмор ]

.: Перенос с экранных координат на карту :.

Rambler's Top100 Рейтинг@Mail.ru List.ru - каталог ресурсов интернет Белорусский каталог BelResource

Copyright IRsoft, web-master Keeper. All rights reserved!

Хостинг от uCoz