Java/Tutorials/Entwicklung eines einfachen Karteneditors III/Kapitel 1
Aus Scientia
Version vom 24. Januar 2011, 12:21 Uhr von Alexis Hiemis (Diskussion | Beiträge)
Als erstes erweitern wir unsere Karten Klasse vom Maker und von der Engine um eine Klassevariable:
int passmap[];
und am Ende des Konstruktor schreiben wir, dies hinzu:
this.passmap=new int[tileset.size()];
Das machen wir, weil wir bestimmen wollen welche Tile begehbar und welche nicht ist.
In der Karten-Klasse der Engine fügen wir zusätzlich noch in der Methode ladeKarte folgendes hinzu:
int[] passmap=(int[]) lese.readObject();
Nach dem laden der Karte:
geladeneKarte.passmap=passmap;
Das machen wir, weil wir die passmap, in jeder Karte erneut bestimmen wollen.
Am Ende sieht es so aus wie diese beiden Klassen, man beachte die Position der Änderungen!
Karten-Klasse der Engine
public class Karte { int[] passmap; int[][] karte; int breite; int höhe; String kartenName; String tilesetDateiname; ArrayList<BufferedImage> tileset=new ArrayList<BufferedImage>(); public Karte(int[][] karte, String dateiname, String name) { this.kartenName=name; this.karte=karte; this.tilesetDateiname=dateiname; breite=karte.length; höhe=karte[0].length; try { BufferedImage bildTileset=ImageIO.read(new File(dateiname)); int breite=bildTileset.getWidth()/32; int höhe=bildTileset.getHeight()/32; for(int x=0;x<breite;x++) { for(int y=0;y<höhe;y++) { BufferedImage tile=bildTileset.getSubimage(x*32, y*32, 32, 32); this.tileset.add(tile); } } } catch (IOException fehler) { fehler.printStackTrace(); } this.passmap=new int[tileset.size()]; } public BufferedImage getTileImage(int x, int y) { int tile=karte[x][y]; return tileset.get(tile); } public void setTile(int x, int y, int tileID) { karte[x][y]=tileID; } public static Karte ladeKarte(String kartendateiname) { try { FileInputStream datei = new FileInputStream(new File(kartendateiname)); BufferedInputStream buf=new BufferedInputStream(datei); ObjectInputStream lese = new ObjectInputStream(buf); int[][]karte=(int[][]) lese.readObject(); String name=(String) lese.readObject(); String dateiname=(String) lese.readObject(); Karte geladeneKarte=new Karte(karte,dateiname, name); lese.close(); return geladeneKarte; } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } return null; } }
Karten-Klasse des Karteneditors:
public class Karte { int[][] karte; int[] passmap; String kartenName; String tilesetDateiname; ArrayList<BufferedImage> tileset=new ArrayList<BufferedImage>(); public Karte(int[][] karte, String dateiname, String name) { this.kartenName=name; this.karte=karte; this.tilesetDateiname=dateiname; try { BufferedImage bildTileset=ImageIO.read(new File(dateiname)); int breite=bildTileset.getWidth()/32; int höhe=bildTileset.getHeight()/32; for(int x=0;x<breite;x++) { for(int y=0;y<höhe;y++) { BufferedImage tile=bildTileset.getSubimage(x*32, y*32, 32, 32); this.tileset.add(tile); } } } catch (IOException fehler) { fehler.printStackTrace(); } this.passmap=new int[tileset.size()]; } public BufferedImage getTileImage(int x, int y) { int tile=karte[x][y]; return tileset.get(tile); } public void setTile(int x, int y, int tileID) { karte[x][y]=tileID; } }