Scopri in quale riquadro è arrivato un clic del mouse


9

Sto lavorando a un gioco a griglia isometrica e sto riscontrando un problema nel tentativo di collegare un clic del mouse dall'utente a una tessera. Sono stato in grado di dividere il problema in 2 parti:

  • Trovare un rettangolo che circonda una tessera (cosa che sono stato in grado di fare)
  • Capire dal rettangolo su cui è stata posata la tessera (mi ha lasciato perplesso)

Ecco un esempio di un rettangolo con tessere all'interno:

Rettangolo contenente tessere

Il rettangolo è lungo 70 px e alto 30 px, quindi se uso un input di dire 30x (in alto) / 20y (a sinistra) come farei per determinare in quale riquadro è caduto?



Che dire di un cambio di coordinate e quindi di un controllo? Se la tua tessera contiene fette di anello, sicuramente utilizzeresti un sistema di coordinate polari.
FxIII,

Risposte:


8

Per ogni passo fatto nella direzione x, ti sposterai 35 pixel a sinistra e -15 pixel verso l'alto sulla tua tela;

Per ogni passo che fai nella direzione y ti sposterai -35 px a sinistra e -15 px verso l'alto sulla tua tela;

piastrella a cartesiana

Ciò significa che puoi convertire facilmente il tuo sistema di coordinate delle piastrelle in pixel:

(x, y) => (35 · x, -15 · x) + (-35 · y, -15 · y) = (35 · x - 35 · y, -15 · x - 15 · y) = ( xpx, YPX)

Devi risolvere il problema inverso che conosci Xpx e Ypx e vuoi conoscere xey (nelle coordinate del riquadro).

Xpx = 35 · x - 35 · y;

Ypx = -15 · x - 15 · y;

puoi risolverlo? Dovrebbe essere:

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

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

Ovviamente avrai valori non interi in generale: prendendo il ceil di entrambi xey otterrai le coordinate dell'intera piastrella.


il rettangolo è lungo 70 px, quindi il passo è 35 px e non 30 px (in orizzontale)
CeeJay
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.