Java/Tutorials/Karteneditor Kapitel 2

Aus Scientia
Version vom 11. Februar 2009, 21:00 Uhr von DrachenKaiser (Diskussion | Beiträge)

(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

Was ist mit Kartenmodel gemeint?

Das Kartenmodel soll unsere Karte im Speicher repräsentieren. Da es viel Speicherkostet und unhandlich ist die Karte komplett als Bild im Speicher zu halten. brauchen wir etwas um die Karte mit nur wenig Speicher im RAM vorzuhalten. Hierfür ist die nächste Klasse da.

public class Karte {
}

Nun stellt sich die Frage, was braucht eine Karte alles um eine Karte zu sein? Als erstes muss man verstehen, das Bilder im Speicher Arrays(Felder) sind, jeder Pixel repräsentiert ein Array-Element und hat als Inhalt einen Farbwert. z.B. 0 für die Farbe schwarz. 2D-Karten Funktionieren das dem selben prinzip, nur das sie nicht 1 Pixel repräsentieren, sondern ein kleines Bild, also ein Tile. Jedes Tile wird also Intern ein Wert zugewießen, dies kann man ruhig ID nennen.

Daher brauchen wir als erstes ein 2 Dimmensionales Array. Als Datentyp nehmen wir hierführ einen Intergerwert, weil dieser wenig Speicher verbraucht. Eine 100x100 Karte würde im Speicher z.B. 20KB verbrauchen(ohne Grafiken!).

public class Karte {
	int[][] karte;
}

Jeder Wert in diesen Array steht für ein Tile. Das nächste was wir brauchen, ist eine möglichkeit die Tile vorzuhalten. Hierfür ist ArrayList gut geeignet, weil wir uns nicht sorgen um die Maximale größe der ArrayList sorgen müssen und sie ist einfach zu handhaben.

public class Karte {
	int[][] karte;
	ArrayList tile=new ArrayList();
}

Als nächstes brauchen wir eine Klasse die ein Bild repräsentiert. Hierführ nehmen wir von den vielen von Java Bereitgestellt Klassen BufferedImage. bevor wir weiter machen, kommt erstmal eine Exkursion in die Generics von Java.

public class Karte {
	int[][] karte;
	ArrayList<BufferedImage> tile=new ArrayList<BufferedImage>();
}

Wie man erkennen kann, haben wir bei der ArrayList <BufferedImage> hinzugefügt. Generics sind in der hinsicht nützlich, weil da durch nur die Klassen hinzugefügt werden, die wir wollen, weil z.B. ein String währe schlecht als Tile.

Nun benötigen wir eine Methode, die uns die entsprechende TIle als BufferedImage, also als Bild zurück liefert, hierführ erweitern wir unsere Klassen um die Methode getTileImage().

public class Karte {
	int[][] karte;
	ArrayList<BufferedImage> tile=new ArrayList<BufferedImage>();
 
	public BufferedImage getTileImage(int x, int y)
	{
		int tile=karte[x][y];
		return tileset.get(tile);
	}
}

Als Parameter wird die Position des Tiles benötigt, dies ist später wichtig um in zwei for-Schleife sich die Karte grafisch, in einen JPanel anzuzeigen.


Da wir ja einen Karteneditor entwickeln, brauchen wir noch eine Methode um die Karte zu ändern. Daher fügen wir eine Methode hinzu die dies vollbringt.


public class Karte {
	int[][] karte;
	ArrayList<BufferedImage> tile=new ArrayList<BufferedImage>();
 
	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;
	}
}

Die Methode setTile, ändert die ID eines Tile, an der entsprechen position.