Basierend auf Ihrem Kommentar ist hier der Code, den ich verwende, um Kachel-XY-Werte in Bildschirmkoordinaten umzuwandeln. Jetzt werden "3D-Kacheln" nicht berücksichtigt, alles wird als auf derselben Ebene liegend betrachtet. Wenn Sie also ein Spiel schreiben, bei dem es darauf ankommt, funktioniert dieser Code nicht.
//this converts a map x/y coordinate into screen coordinates
//public, static method, so can be called outside the Tile object
point Tile::convertToScreen(int x, int y, int offsetX, int offsetY)
{
point screen;
//calculate the screen coordinates
//note: these will then be modified by the camera
screen.x = offsetX - (y * TILE_WIDTH/2) + (x * TILE_WIDTH/2) - (TILE_WIDTH/2);
screen.y = offsetY + (y * TILE_DEPTH/2) + (x * TILE_DEPTH/2);
return screen;
}
point ist einfach eine Struktur mit x und y ints, TILE_WIDTH wäre in Ihrem Fall 64, TILE_DEPTH ist irgendwie falsch benannt (es ist tatsächlich die Höhe der Kachelgrafiken), aber es wäre in Ihrem Fall 32. Die Offsets lauten, wenn Ihre Kachelkarte an einer anderen x, y-Position "beginnen" soll (z. B. wenn sich die Kacheln über einer anderen Kachelgruppe befinden sollen). Typischerweise kann der Versatz 0,0 sein.
Dies erzeugt eine Karte mit 0,0 oben, in der Mitte, wie folgt:
0,0
0,1 1,0
0,2 1,1 2,1
Zum Finden der Kachel x, y des Cursors:
point selectedTile;
int x = mX - camera.x;
int y = mY - camera.y;
selectedTile.x = (y + x/2)/TILE_DEPTH;
selectedTile.y = (y - x/2)/TILE_DEPTH;
In diesem Codebit sind mX und mY die Koordinaten des Mausbildschirms, die wir mit den Kamerawerten kombinieren, um herauszufinden, wo wir uns in "Weltkoordinaten" befinden. Alles andere ist das gleiche wie im vorherigen Codebeispiel.
Dies setzt wiederum eine flache isometrische 2D-Kachelkarte voraus. Wenn Sie eine Halb-3D-Ansicht der Karte verwenden möchten, ist zusätzliche Arbeit erforderlich, und dies setzt voraus, dass Sie ohnehin in 2d arbeiten.