Я работаю над игрой на основе изометрической сетки, и у меня возникла проблема с попыткой связать щелчок мышью пользователя с плиткой. Мне удалось разделить проблему на 2 части:
- Нахождение прямоугольника, который окружает плитку (что я смог сделать)
- Выяснив из прямоугольника, в какой плитке приземлился щелчок (это поставило меня в тупик)
Вот пример прямоугольника с плитками внутри:
Прямоугольник имеет длину 70px и высоту 30px, поэтому, если я использую ввод, скажем, 30x (вверху) / 20y (слева), как бы я определил, к какой плитке это относится?
Ответы:
За каждый шаг, который вы делаете в направлении 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 даст вам координату всей плитки.
источник