Ich arbeite an einem auf einem isometrischen Gitter basierenden Spiel und habe ein Problem beim Versuch, einen Mausklick vom Benutzer mit einer Kachel zu verknüpfen. Ich konnte das Problem in zwei Teile aufteilen:
- Ein Rechteck finden, das eine Kachel umgibt (was ich konnte)
- Herauszufinden aus dem Rechteck, in dem der Klick gelandet ist (hat mich verblüfft)
Hier ist ein Beispiel für ein Rechteck mit Kacheln auf der Innenseite:
Das Rechteck ist 70px lang und 30px hoch. Wenn ich also eine Eingabe von beispielsweise 30x (oben) / 20y (links) verwende, wie würde ich dann bestimmen, in welche Kachel dies fällt?
Antworten:
Für jeden Schritt, den Sie in x-Richtung ausführen, bewegen Sie sich 35 Pixel nach links und -15 Pixel nach oben auf Ihre Leinwand.
Für jeden Schritt, den Sie in y-Richtung ausführen, bewegen Sie sich -35px nach links und -15px nach oben auf Ihre Leinwand.
Dies bedeutet, dass Sie Ihr Kachelkoordinatensystem einfach in Pixel konvertieren können:
(x, y) => (35 · x, -15 · x) + (-35 · y, -15 · y) = (35 · x - 35 · y, -15 · x - 15 · y) = ( Xpx, Ypx)
Sie müssen das inverse Problem lösen, das Sie mit Xpx und Ypx kennen, und Sie möchten x und y (in Kachelkoordinaten) kennen.
Xpx = 35 · x - 35 · y;
Ypx = -15 · x - 15 · y;
Kannst du das lösen? Es sollte sein:
x = 1/70 · Xpx - 1/30 · Ypx
y = -1 / 70 · Xpx - 1/30 · Ypx
Offensichtlich haben Sie im Allgemeinen nicht ganzzahlige Werte: Wenn Sie die Obergrenze von x und y nehmen, erhalten Sie die Koordinate der gesamten Kachel.
quelle