Java/Tutorials/Karteneditor Kapitel 7
In diesem Kapitel werde ich beschreiben, wie man das aktuelle Tile ändern kann. Wir benötigen als erstes eine Methode, die uns unsere aktuelle TileID ändert. Daher legen wir die Methode setTileID(int x, int y) an. In dieser Methode wandeln wir zuerst die Mausposition in Spalte und Reihe des angeklickten Tiles um, daher durch 32. Anschließend multiplizieren wir die Zeile * (Anzahl der Tile in einer Zeile) und addieren die Spalte hinzu. Als Ergebnis bekommen wir die TileID. Um sicherzugehen, dass wir kein TileID wählen, die außerhalb unseres Tileset ist, machen wir eine If-Abfrage in der wir die Anzahl an Tiles im Array mit der TileID vergleichen. Wenn sie kleiner ist, ändern wie die aktuelle TileID in die berechneten um. Anschließend fügen wir noch einen MouseListener hinzu, der unsere Methode aufruft.
public class TilePalette extends JPanel { KartenFenster fenster; int aktuelleTile=0; public TilePalette(KartenFenster kartenfenster) { fenster=kartenfenster; setPreferredSize(new Dimension(4*32, (fenster.aktuelleKarte.tileset.size()/4)*32)); setDoubleBuffered(true); this.addMouseListener(new MouseAdapter(){ @Override public void mouseClicked(MouseEvent e) { setTileID(e.getX(), e.getY()); } }); } public void paintComponent(Graphics g) { int tileAnzahl=fenster.aktuelleKarte.tileset.size(); int zeile=0; int spalte=0; for(int i=0;i<tileAnzahl;i++) { BufferedImage tile=fenster.aktuelleKarte.tileset.get(i); g.drawImage(tile,spalte*32, zeile*32, this); if(i%4 == 3) { zeile++; spalte=0; } else spalte++; } } public void setTileID(int x, int y) { int spalte=x/32; int zeile=y/32; int tileID=zeile*4+spalte; if(tileID < fenster.aktuelleKarte.tileset.size()) { aktuelleTile=tileID; } } }
Und nun kann man eine Karte erstellen. Hier nochmal ein Vergleichsbild:
Herzlichen Glückwunsch, ihr habt fast einen voll funktionierenden Karteneditor. Nun fehlt nur noch das Laden, Speichern und Anlegen von neuen Karten.