Ich schreibe ein isometrisches Spiel, aber leider habe ich stecken schreiben mit dem Algorithmus verwendet, um zurück zu Weltkoordinaten von Bildschirmkoordinaten (oder möglicherweise umgekehrt versa). Jedenfalls kann ich die Implementierungen, die das Gegenteil meiner GetScreenX/Y-Methoden sind, nicht herausfinden. Hier ist ein Code. width und height stellen die Breite/Höhe des Ansichtsfensterbereichs in Kacheln dar.kann nicht herausfinden, umgekehrt von Get World Coords Funktion für isometrische Spiel
Mit der richtigen Implementierung sollte diese ohne Probleme durchlaufen. Sie können es in Linqpad ausführen.
void Main()
{
for(int width = 1;width<15;width++)
{
for(int height = 1;height<10;height++)
{
for(int x = -50;x<50;x++){
for(int y = -50;y<50;y++){
var screenX = GetScreenX(x, y, width, height);
var screenY = GetScreenY(x, y, width, height);
var worldX = GetWorldX(screenX, screenY, width, height);
var worldY = GetWorldY(screenX, screenY, width, height);
if (worldX != x || worldY != y)
{
throw new Exception("Algorithm not right!");
}
}
}
}
}
}
protected int GetScreenX(int x, int y, int width, int height)
{
return WrappingMod(x + y, width);
}
protected int GetWorldX(int x, int y, int width, int height)
{
return 1; //needs correct implementation
}
protected int GetWorldY(int x, int y, int width, int height)
{
return 1; //needs correct implementation
}
protected int GetScreenY(int x, int y, int width, int height)
{
return WrappingMod((int) ((y - x)/2.0), height);
}
static int WrappingMod(int x, int m)
{
return (x % m + m) % m;
}
Entschuldigung, um zu fragen, aber ich bin bei meinem Verstand Ende!
Hmm. Es ist ein bisschen verrückt, ich gebe zu. Was ich mache, ist eine Client Server App zu machen. Der Client sendet die Viewport-Grenzen an den Server, der Server versucht dann herauszufinden, welche Kacheln für den Client sichtbar sind (mit den Methoden, die implementiert werden müssen), und sendet die Daten für diese Kacheln zurück an den Client. Der Client verwendet dann die GetScreen-Methoden, um die Kacheln auf dem Bildschirm zu positionieren. –
Der Grund dafür ist, dass sie den Wrapping-Mod wieder auf dem Bildschirm erscheinen lassen, , also wenn y = 0 und width = 8, werden alle x Positionen -12, -4, 4, 8, 12 usw. auf Position gesetzt 4 –
Hmm, vielleicht hast du recht. Die Frage ist durcheinander –