Hallo Community,
ich arbeite mit Java 6 unter Windows 7 und habe ein paar Fragen bezüglich der drawImage() Methode von der java.awt.Graphics Klasse. Denn mit
dieser Methode kann man ein Bild oder einen Bildausschnitt zeichnen.
Ich machte mir zuerst sorgen wegen der Performance, denn mit anderen Technologien wie .NET habe ich
festgestellt, dass wenn viel gezeichnet wird die Anwendung in die Knie geht. Doch nun musste ich überraschend feststellen, das dem scheinbar nicht so ist.
Ich habe mir dazu ein Beispielprogramm gebaut, dieses besteht aus einem JFrame, in welchem eine
JScrollPane eingesetzt wurde. In der JScrollPane steckt eine eigene, von JComponent abgeleitete
Komponente, welche eine Tilemap zeichnet. Wobei jedes Tile eine Größe von 32x32 Pixel besitzt. Diese eigene Komponente habe ich MapPanel genannt.
Die Größe dieser Komponente wurde auf 3200x3200 Pixel gesetzt, damit diese eine 100x100 Tilemap darstellen kann. Es wird aber natürlich immer nur der sichtbare Bereich der Tilemap gezeichnet.
Der Zeichenvorgang, darum geht es mir nämlich, wird in einer 3-Fach geschachtelten For-Schleife durchgeführt:
Die Variablen w und h in den Schleifen-Köpfen der beiden äußeren Schleifen speichern die Größe des sichtbaren Bereichs(in Tiles).
Die If-Abfrage innerhalb der Schleife dient dazu, je nach Lage der Map-Daten entweder Gras oder eine gelbe Pflanze zu zeichnen. Die Variablen tx und ty werden zu x und y addiert, da sie den Scroll-Wert(in Tiles) der Scroll-Balken beinhalten. Die Variablen scrX und scrY sind ähnlich wie tx und ty, nur speichern sie den Scroll-Wert in Pixeln und wurden zusätzlich modifiziert, so das ein weiches Scrolling entsteht.
Aber worum es eigentlich geht, die Schleife zeichnet eine Tilemap mit 5 Ebenen. Absolut problemlos,
mit Scrolling und allem drum und dran. Auch Tiles lassen sich per Mausklick verändern, ich habe schon einiges probiert und es geht problemlos. Und ich verstehe nicht warum es absolut KEIN bisschen ruckelt beim scrollen.
Selbst wenn ich 25 Ebenen zeichne ruckelt es nicht. Selbst dann, wenn ich die höchste Auflösung die mein Rechner hergibt einstelle(1280x1024) und das Fenster maximiere. Erst ab 50 Ebenen fängt es dann an zu stocken.
Das erscheint mir irgendwie zu krass, könnt ihr mir das erklären? Ich meine ist ja toll dass das sogut
läuft, aber ich kann das einfach nicht glauben. Das muss doch eine Täuschung sein.
gruß
Kento
ich arbeite mit Java 6 unter Windows 7 und habe ein paar Fragen bezüglich der drawImage() Methode von der java.awt.Graphics Klasse. Denn mit
dieser Methode kann man ein Bild oder einen Bildausschnitt zeichnen.
Ich machte mir zuerst sorgen wegen der Performance, denn mit anderen Technologien wie .NET habe ich
festgestellt, dass wenn viel gezeichnet wird die Anwendung in die Knie geht. Doch nun musste ich überraschend feststellen, das dem scheinbar nicht so ist.
Ich habe mir dazu ein Beispielprogramm gebaut, dieses besteht aus einem JFrame, in welchem eine
JScrollPane eingesetzt wurde. In der JScrollPane steckt eine eigene, von JComponent abgeleitete
Komponente, welche eine Tilemap zeichnet. Wobei jedes Tile eine Größe von 32x32 Pixel besitzt. Diese eigene Komponente habe ich MapPanel genannt.
Die Größe dieser Komponente wurde auf 3200x3200 Pixel gesetzt, damit diese eine 100x100 Tilemap darstellen kann. Es wird aber natürlich immer nur der sichtbare Bereich der Tilemap gezeichnet.
Der Zeichenvorgang, darum geht es mir nämlich, wird in einer 3-Fach geschachtelten For-Schleife durchgeführt:
Java:
for(int x = 0; x < w; x++)
{
for(int y = 0; y < h; y++)
{
for(int z = 0; z < 5; z++)
{
t = this.mapData[tx + x][ty + y][z];
// Wenn 0 wird Gras gezeichnet, ansonsten eine gelbe Pflanze
if(t == 0)
{
g.drawImage(this.tileset, scrX + x * 32,
scrY + y * 32,
scrX + x * 32 + 32,
scrY + y * 32 + 32, 0, 0, 32, 32, null);
}
else
{
g.drawImage(this.tileset, scrX + x * 32,
scrY + y * 32,
scrX + x * 32 + 32,
scrY + y * 32 + 32, 32, 0, 64, 32, null);
}
}
}
}
Die Variablen w und h in den Schleifen-Köpfen der beiden äußeren Schleifen speichern die Größe des sichtbaren Bereichs(in Tiles).
Die If-Abfrage innerhalb der Schleife dient dazu, je nach Lage der Map-Daten entweder Gras oder eine gelbe Pflanze zu zeichnen. Die Variablen tx und ty werden zu x und y addiert, da sie den Scroll-Wert(in Tiles) der Scroll-Balken beinhalten. Die Variablen scrX und scrY sind ähnlich wie tx und ty, nur speichern sie den Scroll-Wert in Pixeln und wurden zusätzlich modifiziert, so das ein weiches Scrolling entsteht.
Aber worum es eigentlich geht, die Schleife zeichnet eine Tilemap mit 5 Ebenen. Absolut problemlos,
mit Scrolling und allem drum und dran. Auch Tiles lassen sich per Mausklick verändern, ich habe schon einiges probiert und es geht problemlos. Und ich verstehe nicht warum es absolut KEIN bisschen ruckelt beim scrollen.
Selbst wenn ich 25 Ebenen zeichne ruckelt es nicht. Selbst dann, wenn ich die höchste Auflösung die mein Rechner hergibt einstelle(1280x1024) und das Fenster maximiere. Erst ab 50 Ebenen fängt es dann an zu stocken.
Das erscheint mir irgendwie zu krass, könnt ihr mir das erklären? Ich meine ist ja toll dass das sogut
läuft, aber ich kann das einfach nicht glauben. Das muss doch eine Täuschung sein.
gruß
Kento
Zuletzt bearbeitet: