Extreme Prozessorauslastung durch Hintergrundbild

Status
Nicht offen für weitere Antworten.

Fu3L

Top Contributor
Moin,

ich bin dabei ein kleines 2D-Spiel zu schreiben und würde dabei später gerne auch eine Art von Karte verwenden. Nur dass diese wahrscheinlich nicht aus kleinen Tiles, sodnern aus recht großen Bildern bestehen wird...
Jetzt hab ich aber schon bei einem unbeweglichen Hintergrundbild eine Prozessorauslastung von 100%. Ich rufe dabei alle 10 Millisekunden repaint() für mein JPanel auf. Der Code in paintComponent sieht so aus:

Code:
@Override
	public void paintComponent(Graphics g) {
		
		super.paintComponent(g);
		//setBackground(new Color(255, 255, 0));
		g.drawImage(background[0], 0, 0, this);

		einzeller.drawObject(g);		
		
	} //Ende paintComponent()

Wenn ich das Hintergrundbild weglasse sorgt alles andere (darunter das zeichnen von einzeller.drawObject(g)) für eine Auslastung von nur 15%.
Jetzt frage ich mich, wie das kommt? Mein PC schafft Spiele wie "Der Herr der Ringe - Die Schlacht um Mittelerde 2" mit guter Grafikeinstellung, hat aber bei einem einfachen Hintergrundbild eine 100% Auslastung... (Allerdings hab ich das Auslastungsproblem in einem Prozessorkern auch schon bei einigen Flash-Werbungen gehabt...)

Als Lösung habe ich überlegt, den Hintergrund des JPanel durchsichtig zu machen und das Hintergrundbild in ein Panel darunterzuzeichnen und das halt nur einmal, aber wenn ich das Bild später bewegen will, bringt das natürlich auch nichts mehr...

Weiß jemand vllt wie man das Problem lösen kann? :bahnhof:
 

Lulumann6

Aktives Mitglied
welches bildformat hat dein hintergrund?
wenn es png ist, musst du dafür sorgen, dass du ein colormodel ohne alphakanal nimmst. (oder du benutzt z.B. jpg)
 

Marco13

Top Contributor
Abgesehen davon: Mit einem repaint() alle 10 ms erwartest du, dass er das Bild mindestens 100 mal pro Sekunde komplett neu zeichnet.... Das ist schon viel. Mit 50ms wäre es vermutlich schon besser, aber wie schon angedeutet wurde, kommen da noch andere Punkte dazu, die aus dem geposteten Schnipselchen nicht hervorgehen.... (Angefangen von "Wie groß ist das Bild?" bis "Welches Colormodel wird verwendet?" o.ä. ...)
 

Fu3L

Top Contributor
@Lulumann6: Stimmt es ist png und es ist deutlich schneller mit nem jpg, allerdings hab ich dann noch das Problem, dass es mit sehr vielen Figuren auf dem Bild (die müssen leider .png bleiben, da die verschiedene Transparenzwerte enthalten) auch langsamer wird. Ich kenn mich zwar (noch) nicht mit Colormodels aus (werd ich gleich nachlesen), aber "colormodel ohne alphakanal" hört sich für mich so an, als wenn dann die Transparenz wegfällt?

@Marco13: Ich hab mich da an Quaxlis-Spiele-Tutorial orientiert, aber wenn eine Aktualisierung alle 50 ms für nen flüssigen Spielfluss ausreicht, wäre das natürlich gut :!:
Das Bild ist 1000x1000 Pixel groß. Da fällt mir gleich noch ne Frage ein: Was kann schneller aufgebaut werden: Ein großes Bild oder viele kleine? Weil bei einer Tile-Map wird ja auch ein Bild das ungefähr so groß ist aus den vielen kleinen Bildern erzeugt...
 

Quaxli

Top Contributor
Google mal nach "Killer Game Programming" und such dort mal das Kapitel über aktives Rendern raus, da findest Du sicherlich viele gute Tipps, was die Frame-Rate betrifft. Dort findest Du auch einen Schrittweisen Aufbau des Render-Prozesses von einfach nach komplex, der für Dich interessant sein dürfte.

Wenn Dein Bild 1000 x 1000 Pixel groß ist, wird es vermutlich nicht komplett angezeigt, oder? Dann könnte eine Tile-Map unter Umständen Vorteile bringen.
 

Fu3L

Top Contributor
Hab mir jezz Kapitel 2 und 5 durchgelesen und muss erstma Pause machen (die Schrift is so schön scharf :autsch: )
Bis jetzt hab ich nur Sachen gelesen, die schon in deinem Tutorial drin stehen, wenn ich nichts überlesen hab^^ Die Sachen (VolatileImage und die Umstellung aufn Canvas usw.) hab ich gestern schon eingebaut. (Übrigends großes Lob für das Tutorial :wink: )
Das einzige was ich noch rausgelesen hab, ist, dass ich mit dem ColorModel wohl auch nichts mehr rausholen kann, wenn ich die verschiendenen Transparenzwerte eines PNG-Bildes brauche (Seh ich das richtig?)

Und es stimmt, das Bild wird nicht komplett angezeigt und da ich später wahrscheinlich mehrere dieser Bilder aneinanderlegen werde, wirds wohl das beste sein, das nochmal zu zerstückeln...
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M.F.G. Spielvorstellung (plus KI frage): Connect Four – Extreme Spiele- und Multimedia-Programmierung 11
P Zahlenwert durch Methode ersetzen Spiele- und Multimedia-Programmierung 1
D Iterieren durch einen Ordner mit Audiodateien und verketten eine andere Audiodatei Spiele- und Multimedia-Programmierung 17
A Spielfelder erstellen mit Jogl Java durch ein Koordinaten Array Spiele- und Multimedia-Programmierung 1
R Durch String Platform Game erstellen Spiele- und Multimedia-Programmierung 8
lord239123 JMonkey Schatten werden durch Terrain hindurch angezeigt Spiele- und Multimedia-Programmierung 1
R Mp3 Rating (POPM) durch JAudioTagger? Spiele- und Multimedia-Programmierung 2
M Objekte verschwinden durch Explosion Spiele- und Multimedia-Programmierung 2
B j3d Kamera Rotation durch Tastendruck Spiele- und Multimedia-Programmierung 12
I Framerate-Einbrüche durch Synchronisation Spiele- und Multimedia-Programmierung 12
E [JAVA3D] Schattenstrich durch die Szene Spiele- und Multimedia-Programmierung 4
N Zufallserzeugung durch KI Spiele- und Multimedia-Programmierung 23
H Grafik verschwindet durch Größenveränderung von GridBag Spiele- und Multimedia-Programmierung 5
S Hilfe: Ich sehe durch die ganze Api's nicht mehr durch! Spiele- und Multimedia-Programmierung 15
B Animation durch Button auslösen Spiele- und Multimedia-Programmierung 2
D Polygonsize durch das umliegende Reckteck verändern inJava2D Spiele- und Multimedia-Programmierung 6
S Fehlerhafte Darstellung durch Transparenz? Spiele- und Multimedia-Programmierung 8
A durch Objekte hindurchzoomen Spiele- und Multimedia-Programmierung 2
masta // thomas Kollisionsabfrage - inspiriert durch "pixelgenaue Kolli Spiele- und Multimedia-Programmierung 13
E Durch Klick auf den JButton will ich die Farbe ändern? Spiele- und Multimedia-Programmierung 8
R Enorme Leistungseinbußen durch Alphakanäle Spiele- und Multimedia-Programmierung 3

Ähnliche Java Themen

Neue Themen


Oben