Выяснение, в какой клетке приземлился щелчок мыши

9

Я работаю над игрой на основе изометрической сетки, и у меня возникла проблема с попыткой связать щелчок мышью пользователя с плиткой. Мне удалось разделить проблему на 2 части:

  • Нахождение прямоугольника, который окружает плитку (что я смог сделать)
  • Выяснив из прямоугольника, в какой плитке приземлился щелчок (это поставило меня в тупик)

Вот пример прямоугольника с плитками внутри:

Прямоугольник, содержащий плитки

Прямоугольник имеет длину 70px и высоту 30px, поэтому, если я использую ввод, скажем, 30x (вверху) / 20y (слева), как бы я определил, к какой плитке это относится?

осколок
источник
3
Возможный дубликат: gamedev.stackexchange.com/questions/12362/…
thedaian
Как насчет изменения координат, а затем проверки? Если на вашей плитке есть кусочки кольца, вы наверняка будете использовать полярную систему координат.
FxIII

Ответы:

8

За каждый шаг, который вы делаете в направлении x, вы будете двигаться на 35 пикселей влево и -15 на ваш холст;

За каждый шаг, который вы делаете в направлении y, вы будете перемещаться на -35px влево и -15px на холст;

плитка в декартовой

Это означает, что вы можете легко преобразовать свою систему координат плитки в пиксели:

(x, y) => (35 · x, -15 · x) + (-35 · y, -15 · y) = (35 · x - 35 · y, -15 · x - 15 · y) = ( Xpx, уРх)

Вы должны решить обратную проблему, которую вы знаете, Xpx и Ypx, и вы хотите знать x и y (в координате тайла).

Xpx = 35 · x - 35 · y;

Ypx = -15 · x - 15 · y;

Вы можете решить это? Это должно быть:

x = 1/70 · Xpx - 1/30 · Ypx

y = -1 / 70 · Xpx - 1/30 · Ypx

Очевидно, что в общем случае вы будете иметь нецелые значения: взятие значений x и y даст вам координату всей плитки.

FXIII
источник
прямоугольник длиной 70px, затем шаг 35px, а не 30px (по горизонтали)
CeeJay