Averiguar en qué mosaico aterrizó un clic del mouse

9

Estoy trabajando en un juego basado en una cuadrícula isométrica y tengo un problema al intentar vincular un clic del mouse del usuario a un mosaico. He podido dividir el problema en 2 partes:

  • Encontrar un rectángulo que rodea un mosaico (que he podido hacer)
  • Averiguando desde el rectángulo en qué mosaico aterrizó el clic (me tiene perplejo)

Aquí hay un ejemplo de un rectángulo con mosaicos en el interior:

Rectángulo que contiene azulejos

El rectángulo tiene 70 px de largo y 30 px de alto, así que si uso una entrada de digamos 30x (arriba) / 20y (izquierda), ¿cómo determinaría en qué mosaico cayó?

Casco
fuente
3
Posible duplicado: gamedev.stackexchange.com/questions/12362/…
thedaian
¿Qué pasa con un cambio de coordenadas y luego un cheque? Si su azulejo tiene rebanadas de anillo, seguramente usaría un sistema de coordenadas polares.
FxIII

Respuestas:

8

Por cada paso que realice en la dirección x, se moverá 35 píxeles hacia la izquierda y -15 píxeles hasta su lienzo;

Por cada paso que realice en la dirección y, moverá -35px a la izquierda y -15px hacia su lienzo;

azulejo a cartesiano

Esto significa que puede convertir su sistema de coordenadas de mosaico fácilmente en píxeles:

(x, y) => (35 · x, -15 · x) + (-35 · y, -15 · y) = (35 · x - 35 · y, -15 · x - 15 · y) = ( Xpx, Ypx)

Debe resolver el problema inverso que conoce Xpx e Ypx y desea saber x e y (en coordenadas de mosaico).

Xpx = 35 · x - 35 · y;

Ypx = -15 · x - 15 · y;

¿Puedes resolver esto? Debería ser:

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

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

Obviamente, tendrá valores no enteros en el caso general: tomar el techo de x e y le dará la coordenada de todo el mosaico.

FxIII
fuente
el rectángulo mide 70 px de largo, luego el escalón mide 35 px y no 30 px (en horizontal)
CeeJay