Hallo liebe Forengemeinde,
ich habe einen kleinen Denkfehler bei der Ausrichtung einer Kamera auf einer isometrischen Tilemap. Wie in vielen (älteren) Spielen will ich meine isometrische Welt aus vier verschiedenen Perspektiven anzeigen lassen. Zu diesem Zweck habe ich jedem Objekt verschiedene Ansichten mitgegeben und lasse diese entsprechend rendern. Das klappt auch soweit. Jetzt habe ich nur das Problem, dass sich die Karte dreht und die Kamera auf eine völlig andere Stelle guckt. Ist ja auch klar, die Stelle, wo die Kamera jetzt steht ist die alte Position. Ich muss irgendwie die Kamera mitdrehen damit die Kamera auf exakt dieselbe Position guckt, von der aus ich die Ansicht geändert habe. Leider weis ich nicht ganz, wie ich das anstellen soll.
Eine Ansichtsänderung von Norden nach Süden habe ich schon hinbekommen, aber was ist, wenn die Ansicht von Norden nach Osten oder Westen geändert wird. :?: Keine Ahnung :-(
Hier mal eine kleine Skizze, auf der ich mal probiert habe aufzuzeichnen was ich meine. Die Raute ist meine Map und die verschiedenen Vierecke sind die Kameraansichten darauf.
Hier nochmal die bewuste Stelle im Code:
[Java]@Override
public synchronized void setDirection(Direction direction) {
Direction oldDirection = getDirection();
super.setDirection(direction);
// Translieren der Kameraposition
if (camera != null && getTiles() != null && oldDirection != direction) {
// Berechne den Offset der Kamera zum Mittelpunkt der Karte
int width = getTiles().length;
int height = getTiles()[0].length;
double mapW = width * getTileWidth();
double mapH = height * getTileHeight();
double camMaxX = (mapW - camera.getWidth());
double camMaxY = (mapH - camera.getHeight());
double mapCenterX = mapW / 2.;
double diffX = mapCenterX + camMaxX - camera.getX() - getX();
double diffY = camMaxY - camera.getY() - getY();
// Änderung von Nord nach Süd oder umgekehrt
if ((oldDirection == Direction.NORTH || oldDirection == Direction.SOUTH) && (direction == Direction.NORTH || direction == Direction.SOUTH))
camera.setY(diffY);
// Alles weiter, keine Ahnung :-(
}
}[/Java]
Ich hoffe ihr habt mein Problem verstanden
ich habe einen kleinen Denkfehler bei der Ausrichtung einer Kamera auf einer isometrischen Tilemap. Wie in vielen (älteren) Spielen will ich meine isometrische Welt aus vier verschiedenen Perspektiven anzeigen lassen. Zu diesem Zweck habe ich jedem Objekt verschiedene Ansichten mitgegeben und lasse diese entsprechend rendern. Das klappt auch soweit. Jetzt habe ich nur das Problem, dass sich die Karte dreht und die Kamera auf eine völlig andere Stelle guckt. Ist ja auch klar, die Stelle, wo die Kamera jetzt steht ist die alte Position. Ich muss irgendwie die Kamera mitdrehen damit die Kamera auf exakt dieselbe Position guckt, von der aus ich die Ansicht geändert habe. Leider weis ich nicht ganz, wie ich das anstellen soll.
Eine Ansichtsänderung von Norden nach Süden habe ich schon hinbekommen, aber was ist, wenn die Ansicht von Norden nach Osten oder Westen geändert wird. :?: Keine Ahnung :-(
Hier mal eine kleine Skizze, auf der ich mal probiert habe aufzuzeichnen was ich meine. Die Raute ist meine Map und die verschiedenen Vierecke sind die Kameraansichten darauf.
Hier nochmal die bewuste Stelle im Code:
[Java]@Override
public synchronized void setDirection(Direction direction) {
Direction oldDirection = getDirection();
super.setDirection(direction);
// Translieren der Kameraposition
if (camera != null && getTiles() != null && oldDirection != direction) {
// Berechne den Offset der Kamera zum Mittelpunkt der Karte
int width = getTiles().length;
int height = getTiles()[0].length;
double mapW = width * getTileWidth();
double mapH = height * getTileHeight();
double camMaxX = (mapW - camera.getWidth());
double camMaxY = (mapH - camera.getHeight());
double mapCenterX = mapW / 2.;
double diffX = mapCenterX + camMaxX - camera.getX() - getX();
double diffY = camMaxY - camera.getY() - getY();
// Änderung von Nord nach Süd oder umgekehrt
if ((oldDirection == Direction.NORTH || oldDirection == Direction.SOUTH) && (direction == Direction.NORTH || direction == Direction.SOUTH))
camera.setY(diffY);
// Alles weiter, keine Ahnung :-(
}
}[/Java]
Ich hoffe ihr habt mein Problem verstanden
Zuletzt bearbeitet: