Dowiedz się, w którym kafelku wylądowało kliknięcie myszy

9

Pracuję nad grą opartą na siatce izometrycznej i mam problem z połączeniem kliknięcia myszy użytkownika z kafelkiem. Udało mi się podzielić problem na 2 części:

  • Znalezienie prostokąta otaczającego kafelek (co udało mi się zrobić)
  • Zrozumienie z prostokąta, w który wylądował kliknięcie (doprowadziło mnie do zakłopotania)

Oto przykład prostokąta z płytkami w środku:

Prostokąt zawierający płytki

Prostokąt ma 70px długości i 30px wysokości, więc jeśli użyję danych wejściowych, powiedzmy 30x (góra) / 20y (lewa strona), jak mógłbym zająć się określeniem, do którego kafelka wpadł?

Czerep
źródło
3
Możliwy duplikat: gamedev.stackexchange.com/questions/12362/…
thedaian
Co ze zmianą współrzędnych, a następnie sprawdzeniem? Jeśli twój kafelek zawierał fragmenty pierścienia, z pewnością użyłbyś biegunowego układu współrzędnych.
FxIII

Odpowiedzi:

8

Za każdy krok, który zrobisz w kierunku x, przesuniesz 35 pikseli w lewo i -15 pikseli w górę do swojego płótna;

Za każdy krok, który zrobisz w kierunku y, przesuniesz -35px w lewo i -15px w górę na swoje płótno;

dachówka do kartezjańskiego

Oznacza to, że możesz łatwo przekonwertować układ współrzędnych kafelków na piksele:

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

Musisz rozwiązać odwrotny problem, który znasz Xpx i Ypx i chcesz znać xiy (we współrzędnych kafelkowych).

Xpx = 35 · x - 35 · y;

Ypx = -15 · x - 15 · y;

możesz to rozwiązać? Powinno to być:

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

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

Oczywiście w ogólnym przypadku będziesz mieć wartości inne niż całkowite: wzięcie pułapu zarówno x, jak i y da ci współrzędną całej płytki.

FxIII
źródło
prostokąt ma długość 70 pikseli, a następnie krok wynosi 35 pikseli, a nie 30 pikseli (w poziomie)
CeeJay