Guten Tag Forum,
//Ausgangssituation:
da ich in den Ferien etwas Zeit habe wollte ich mich auch mal an die Entwicklung von Java-Spielen wage, bevor man aber loslegen kann, braucht man erstmal eine Grundstruktur, um die vielen Bilder, die sich auf dem JFrame tummeln sollen anständig zu verwalten.
Diese Grundstruktur sieht bei mir so aus:
(Pix und Kino sind eigene Klassen)
- der JFrame ist von einem einzigen „Kino extends JPanel“ - Objekt ausgefüllt
- diese Kino-Classe hat eine Liste von „Pix“ – Objekten, die jeweils neben einem Image-Objekt noch zahlreiche Variablen für Position, Drehung, Scherung usw. und schließlich ein AffineTransform-Objekt enthalten
- in jedem Arbeitsschritt (bestimmt durch ein Timer-Objekt) wird innerhalb des Kino-Objekts für jedes Pix aus seinen genannten Variablen (die sich jederzeit ändern lassen) eine AffineTransformation berechnet und an das Pix zurückgegeben
- zum Schluss wird mit „this.repaint“ und der überschriebenen paintComponent jedes Image eines jeden Pix-Objektes mit der zugehörigen AffineTransformation auf das JPanel (Kino) und damit auf den JFrame gemalt
Das tolle an der ganzen Sache ist, dass man viele Bilder nach Lust und Laune darstellen und beliebig manipulieren kann, einfach ein neues Pix mit den gewünschten Parametern in die Liste des Kino-Objekts einfügen oder bei einem schon bestehenden die Variablen verändern.
Ich denke, das ist eine solide Grundlage für JEDES Java-Spiel und wenn Ihr wollt (entweder um einen besseren Überblick über mein folgendes Problem zu bekommen, oder für jeden, der sofort mit dem eigentlichen Spiele-Entwickeln anfangen will) kann ich den Code auch mal Posten (natürlich auf das Nötigste beschränkt).
//das Problem:
Es lassen sich also viele Bilder dort einfügen und dynamisch verändern (hauptsächlich für Animation für Bewegungen u.Ä.), auf meinem R40 Laptop bis zu 4000, ab dann beginnt es zu stocken.
Ganz klar: zu viele AffineTransotmation-Berechnungen, zu viele Bilder müssen gemalt werden.
Lösung: Culling, also nur die Bilder berechnen und malen, die aufgrund ihrer Position (die ja im zugehörigen Pix gespiechert ist) tatsächlich im JFrame zu sehen sein werden.
Vor Berechnung und Zeichnung des Bildes lasse ich für jedes Pix entscheiden (und speichere das Ergebnis in einem boolean (auch im Pix)) ob es im JFrame zu sehen sein wird. Und dieser boolean wird vor Berechnung und Zeichnung abgefragt.
Problem: es hilft nicht, mit und ohne Culling kein Unterschied.
Hat jemand von Euch Erfahrung mit dem Culling von Image-Objekten oder gar ein anderes Konzept zur Darstellung und Manipulation (beliebig-)vieler Bilder auf einem JFrame?
mfG Peace
p.s. entschuldigt das viele Geschreibsel, werde mich in Zukunft kürzer fassen
//Ausgangssituation:
da ich in den Ferien etwas Zeit habe wollte ich mich auch mal an die Entwicklung von Java-Spielen wage, bevor man aber loslegen kann, braucht man erstmal eine Grundstruktur, um die vielen Bilder, die sich auf dem JFrame tummeln sollen anständig zu verwalten.
Diese Grundstruktur sieht bei mir so aus:
(Pix und Kino sind eigene Klassen)
- der JFrame ist von einem einzigen „Kino extends JPanel“ - Objekt ausgefüllt
- diese Kino-Classe hat eine Liste von „Pix“ – Objekten, die jeweils neben einem Image-Objekt noch zahlreiche Variablen für Position, Drehung, Scherung usw. und schließlich ein AffineTransform-Objekt enthalten
- in jedem Arbeitsschritt (bestimmt durch ein Timer-Objekt) wird innerhalb des Kino-Objekts für jedes Pix aus seinen genannten Variablen (die sich jederzeit ändern lassen) eine AffineTransformation berechnet und an das Pix zurückgegeben
- zum Schluss wird mit „this.repaint“ und der überschriebenen paintComponent jedes Image eines jeden Pix-Objektes mit der zugehörigen AffineTransformation auf das JPanel (Kino) und damit auf den JFrame gemalt
Das tolle an der ganzen Sache ist, dass man viele Bilder nach Lust und Laune darstellen und beliebig manipulieren kann, einfach ein neues Pix mit den gewünschten Parametern in die Liste des Kino-Objekts einfügen oder bei einem schon bestehenden die Variablen verändern.
Ich denke, das ist eine solide Grundlage für JEDES Java-Spiel und wenn Ihr wollt (entweder um einen besseren Überblick über mein folgendes Problem zu bekommen, oder für jeden, der sofort mit dem eigentlichen Spiele-Entwickeln anfangen will) kann ich den Code auch mal Posten (natürlich auf das Nötigste beschränkt).
//das Problem:
Es lassen sich also viele Bilder dort einfügen und dynamisch verändern (hauptsächlich für Animation für Bewegungen u.Ä.), auf meinem R40 Laptop bis zu 4000, ab dann beginnt es zu stocken.
Ganz klar: zu viele AffineTransotmation-Berechnungen, zu viele Bilder müssen gemalt werden.
Lösung: Culling, also nur die Bilder berechnen und malen, die aufgrund ihrer Position (die ja im zugehörigen Pix gespiechert ist) tatsächlich im JFrame zu sehen sein werden.
Vor Berechnung und Zeichnung des Bildes lasse ich für jedes Pix entscheiden (und speichere das Ergebnis in einem boolean (auch im Pix)) ob es im JFrame zu sehen sein wird. Und dieser boolean wird vor Berechnung und Zeichnung abgefragt.
Problem: es hilft nicht, mit und ohne Culling kein Unterschied.
Hat jemand von Euch Erfahrung mit dem Culling von Image-Objekten oder gar ein anderes Konzept zur Darstellung und Manipulation (beliebig-)vieler Bilder auf einem JFrame?
mfG Peace
p.s. entschuldigt das viele Geschreibsel, werde mich in Zukunft kürzer fassen