Probleme mit Kameraausrichtung bei ISO-Map

Steev

Bekanntes Mitglied
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.

draft_isoCamera.gif


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:

Steev

Bekanntes Mitglied
Hi Quaxli, das Problem ist, dass ich nicht umbedingt eine Spielfigur habe. Wenn man sich einfach nur beim Bauen mal schnell die Ansicht wechseln will, weil ein Objekt verdeckt wird, dann geht das ja auch nicht.

Ich habe mittlerweile mein Problem auch (fast) gelößt. In der Mitte der Karte muss die Position der Kamera ja nicht verschoben werden, weil die Position bei jeder Ausrichtungsänderung gleich bleibt. Deshalb gehe ich einfach von dem Mittelpunkt der Karte aus und berechne die Differenz. Auf der X-Achse habe ich dann noch zusätzlich das Problem, dass der Nullpunkt genau in der Mitte der Karte liegt. Da gehe ich jetzt einfach her und verschiebe den Nullpunkt auf den Anfang der Karte und berechne dann die Position genau wie auf der Y-Achse.

NORD nach SÜD und SÜD nach NORD funktioniert.
OST nach WEST und WEST nach OST funktioniert.

Das einzige Problem was ich jetzt nur habe ist, wenn ich von NORD nach OST oder OST nach SÜD die Ansicht wechsle.
Das weis ich noch nicht so ganz, wie ich das machen muss.
 

Steev

Bekanntes Mitglied
Ok,

das Problem hat sich erledigt :-D
Ich habe nur einen total dummen Denkfehler gemacht. Man muss natürlich die Kamera-Koordinaten in Verbindung mit dem Mittelpunkt der Map transformieren, sonst kann es ja nicht gehen...

Das hier wäre ist richtige Lösung:

[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 Mittelpunkt der Karte
int height = getTiles()[0].length;
double mapH = height * getTileHeight();
double mapCenterY = mapH / 2.;

// Berechne die Kamerakoordinaten auf der Karte
double cameraCenterX = camera.getWidth() / 2.;
double cameraCenterY = camera.getHeight() / 2.;
double cameraX = camera.getX() + cameraCenterX - getX();
double cameraY = camera.getY() + cameraCenterY - getY() - mapCenterY;

if ((oldDirection == Direction.NORTH && direction == Direction.SOUTH) ||
(oldDirection == Direction.SOUTH && direction == Direction.NORTH)) {
camera.setY(-cameraY + mapCenterY - cameraCenterY);
}

if ((oldDirection == Direction.EAST && direction == Direction.WEST) ||
(oldDirection == Direction.WEST && direction == Direction.EAST)) {
camera.setX(-cameraX - cameraCenterX + (getTileWidth() * 1.5));
}

if ((oldDirection == Direction.NORTH && direction == Direction.EAST) ||
(oldDirection == Direction.EAST && direction == Direction.NORTH) ||
(oldDirection == Direction.SOUTH && direction == Direction.WEST) ||
(oldDirection == Direction.WEST && direction == Direction.SOUTH)) {
camera.setX(-(cameraY * 2.) - cameraCenterX + (getTileWidth() * 1.5));
camera.setY(-(cameraX / 2.) + mapCenterY - cameraCenterY);
}

if ((oldDirection == Direction.EAST && direction == Direction.SOUTH) ||
(oldDirection == Direction.SOUTH && direction == Direction.EAST) ||
(oldDirection == Direction.WEST && direction == Direction.NORTH) ||
(oldDirection == Direction.NORTH && direction == Direction.WEST)) {
camera.setX((cameraY * 2.) - cameraCenterX + (getTileWidth() * 1.5));
camera.setY((cameraX / 2.) + mapCenterY - cameraCenterY);
}
}
}[/Java]
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
E Scaling Probleme Spiele- und Multimedia-Programmierung 6
J Probleme bei Pong Spiele- und Multimedia-Programmierung 9
D Java Bomberman Probleme java.lang.NullPointerException Spiele- und Multimedia-Programmierung 1
J YoutubeAPI Livestream probleme Spiele- und Multimedia-Programmierung 3
G [LibGDX] Button Klick Probleme Spiele- und Multimedia-Programmierung 1
T Probleme mit JButton Spiele- und Multimedia-Programmierung 5
T Probleme bei "Pixel-Fighting"-Spiel: Unausgewogene Mannschaften??? Spiele- und Multimedia-Programmierung 4
P Probleme mit VLCJ Spiele- und Multimedia-Programmierung 0
F Probleme bei der Soundwiedergabe Spiele- und Multimedia-Programmierung 0
S Probleme bei Breakout - Brick kollision Spiele- und Multimedia-Programmierung 2
S 2D-Render Probleme LWJGL 2 (Java) Spiele- und Multimedia-Programmierung 1
F BlueJ Ufospiel Probleme Spiele- und Multimedia-Programmierung 1
B Probleme mit AndEngine in Android Spiele- und Multimedia-Programmierung 1
M 2048, 3 kleine Probleme Spiele- und Multimedia-Programmierung 4
A Probleme mit Darstellung von Umgebungen mittels mehrdimensionaler Arrays Spiele- und Multimedia-Programmierung 8
J Java Game performance Probleme Spiele- und Multimedia-Programmierung 7
J Perfomance Probleme beim eigenen Editor Spiele- und Multimedia-Programmierung 1
K Probleme beim kompilieren von javakara Spiele- und Multimedia-Programmierung 10
Q LWJGL - Alpha-Probleme Spiele- und Multimedia-Programmierung 2
M Point & Click Thread Probleme Spiele- und Multimedia-Programmierung 20
K Probleme mit .jar Spiele- und Multimedia-Programmierung 12
L Probleme beim kompilieren von javakara Spiele- und Multimedia-Programmierung 3
D Probleme mit der Runnable jar Datei Spiele- und Multimedia-Programmierung 3
D Probleme mit objekt initializirung mit Mouselistener Spiele- und Multimedia-Programmierung 10
Black_ixx Hintergrund & Koordinaten Probleme Spiele- und Multimedia-Programmierung 2
B Probleme mit Texturen Spiele- und Multimedia-Programmierung 7
Maxim6394 Probleme bei Sidescroller Spiele- und Multimedia-Programmierung 5
R Probleme mit JPanel!KeyListener geht nicht Spiele- und Multimedia-Programmierung 6
Maxim6394 [Java3D] Probleme bei Kollision Spiele- und Multimedia-Programmierung 7
Maxim6394 [Java3D] Probleme mit KeyFrame Animationen Spiele- und Multimedia-Programmierung 9
T Probleme mit Skysphere in Opengl Spiele- und Multimedia-Programmierung 4
B Probleme mit redraw() Spiele- und Multimedia-Programmierung 3
Gossi Quaxlis 2D Tutorial....Probleme nach hinzufügen der Kollisionsabfrage Spiele- und Multimedia-Programmierung 16
Gossi Probleme beim Laden der Images aus dem "Tutorial für Java-Spiele" Spiele- und Multimedia-Programmierung 4
S Probleme mit Tutorial Spiele- und Multimedia-Programmierung 3
T Probleme mit AffineTransform Spiele- und Multimedia-Programmierung 13
W Probleme mit Mouselook Spiele- und Multimedia-Programmierung 2
B GameGrid Probleme mit mehrere Actors Spiele- und Multimedia-Programmierung 5
B GameGrid Probleme mit mehrere Actors Spiele- und Multimedia-Programmierung 2
M [Spiel] Kartenspiel Leben und Tod Tips und Probleme Spiele- und Multimedia-Programmierung 7
G [Java3D] Probleme bei Animation Spiele- und Multimedia-Programmierung 4
S Probleme mit JMenu in einem JFrame mit BufferStrategy Spiele- und Multimedia-Programmierung 2
R MediaPlayer macht Probleme Spiele- und Multimedia-Programmierung 2
N Jogl Probleme mit dem Buffer beim laden einer Textur Spiele- und Multimedia-Programmierung 2
prakdi Probleme mit Quaxlis tutorial Spiele- und Multimedia-Programmierung 5
D Java Pong Probleme Spiele- und Multimedia-Programmierung 7
T Java Sound Probleme Spiele- und Multimedia-Programmierung 8
P probleme mit key event Spiele- und Multimedia-Programmierung 11
T Bekanntes Heli Spiel -> Aber Probleme damit Spiele- und Multimedia-Programmierung 30
S Probleme mit Thread beim Streaming Spiele- und Multimedia-Programmierung 1
O Ampel - Probleme mit der Farbgebung Spiele- und Multimedia-Programmierung 16
F Probleme bei Bewegung Spiele- und Multimedia-Programmierung 7
P Probleme mit Vista und JOGL Spiele- und Multimedia-Programmierung 2
P Probleme mit Wolkenbewegung Spiele- und Multimedia-Programmierung 5
W Probleme mit dem setTextureCoordinate Spiele- und Multimedia-Programmierung 3
D Probleme beim Download von GIF-Bildern Spiele- und Multimedia-Programmierung 4
S Probleme mit dem Licht und dem KeyListener Spiele- und Multimedia-Programmierung 2
L Probleme Bei Pong Programmierung Spiele- und Multimedia-Programmierung 2
D Probleme bei ATI Karten bekannt? Spiele- und Multimedia-Programmierung 4
H Probleme bei Rotation Spiele- und Multimedia-Programmierung 9
X Probleme. Spiele- und Multimedia-Programmierung 2
E Probleme mit Kollisionserkennung ! Spiele- und Multimedia-Programmierung 2
F Probleme mit selbsterstelltem transparenten PNG Spiele- und Multimedia-Programmierung 5
S probleme mit material Spiele- und Multimedia-Programmierung 2
W Probleme beim entfernen von Childs im HauptSceneGraph Spiele- und Multimedia-Programmierung 8
N Pong - noch 2 kleinere Probleme Spiele- und Multimedia-Programmierung 16
M Probleme mit WaveFront-Object - Datei Spiele- und Multimedia-Programmierung 7
B Probleme beim zeichnen Spiele- und Multimedia-Programmierung 15
D Gomoku --- Probleme bei Instanzierung Spiele- und Multimedia-Programmierung 2
G Probleme beim installieren java 3d linux Spiele- und Multimedia-Programmierung 4
G Sound Probleme Spiele- und Multimedia-Programmierung 2
S Probleme mit Canvas! Spiele- und Multimedia-Programmierung 2
S Jump'n'Run: Probleme mit Kollision Spiele- und Multimedia-Programmierung 13
C Probleme mit Java3D (sun.awt.DrawingSurface) in Java 5 Spiele- und Multimedia-Programmierung 10
R Probleme mit Sound in Applikation. HILFE Spiele- und Multimedia-Programmierung 5
N Probleme mit View Spiele- und Multimedia-Programmierung 3

Ähnliche Java Themen

Neue Themen


Oben