Keller-Dev
Docs
· Java & Hytale
Übersicht
Neuer Eintrag
Eintrag bearbeiten
Titel *
Kategorie *
Java Core
Java OOP
Java Advanced
Plugin-System
Event-System
UI-System
Sonstiges
Erklärung / Inhalt *
Die Kamera entkoppelt die Spielfeldgröße von der eigentlichen Fenstergröße (Viewport). Statt Objekte beim Rendern manuell umzurechnen, transformiert die Kamera den gesamten Zeichenkontext via Graphics2D.translate(-camX, -camY). Wichtige Architektur-Highlights:Zentrierung: Die Zielposition richtet sich an der Mitte der Player-Bounding-Box aus. Clamping: clamp() verhindert, dass die Kamera den sichtbaren Kartenausschnitt verlässt und leeren Raum zeigt. Graphics-Isolation: Um Nebeneffekte auf andere Swing-Renderings zu vermeiden, wird mit g.create() eine Arbeitskopie von Graphics2D erstellt und am Ende via dispose() freigegeben.
Code-Beispiel (optional)
// In Camera.java public void update(Player player, TileMap tileMap) { double targetX = player.getX() + player.getSize() / 2.0 - viewportWidth / 2.0; double targetY = player.getY() + player.getSize() / 2.0 - viewportHeight / 2.0; if (tileMap != null) { int mapPixelWidth = tileMap.getWidthInTiles() * TileMap.TILE_SIZE; int mapPixelHeight = tileMap.getHeightInTiles() * TileMap.TILE_SIZE; targetX = clamp(targetX, 0, Math.max(0, mapPixelWidth - viewportWidth)); targetY = clamp(targetY, 0, Math.max(0, mapPixelHeight - viewportHeight)); } this.x = targetX; this.y = targetY; } // In GamePanel.paintComponent(Graphics g) Graphics2D cameraView = (Graphics2D) g.create(); cameraView.translate((int) Math.round(-camera.getX()), (int) Math.round(-camera.getY())); drawTileMap(cameraView); drawInteractables(cameraView); cameraView.dispose(); // Wichtig: Kopie aufräumen
Referenz-Datei / Projekt (optional)
Referenz-Klasse / Interface (optional)
Quellen-Link (optional)
Tags (durch Komma getrennt)
Änderungen speichern
Abbrechen