Performance (BufferStrategy?)

Status
Nicht offen für weitere Antworten.

Nova

Bekanntes Mitglied
Hallo,

Ich programmiere gerade ein 2D-Spiel, musste aber feststellen das die CPU-Auslastung schon jetzt sehr hoch ist (50% bei einem Athlon2500+). Dabei wird momentan nur ein Hintergrundbild, 2 Flugzeuge und die Geschosse der 2 Flugzeuge gezeichnet.
Alles besteht aus Bildern, sowohl das Flugzeug als auch die Geschosse.

Das Spiel wird von 2 Spielern gespielt, desshalb mit Splitscreen.
Das Spielfeld ist größer als ein Bildschirm, d.h. der Bildausschnitt scrollt mit.

Realisiert ist das momentan so das ich ein JSplitPane in mein Frame lege und dort dann 2 Panels reinstecke.
Das erste Panel zeigt den Bereich um das Flugzeug von Spieler 1, das zweite Panel den Bereich um das Flugzeug von Spieler 2.
Hier mal ein Bild:
Bild1


Später sollen da noch mehr Objekte hinzukommen, Flak-Feuer, mehr Flugzeuge etc., es soll auch noch eine KI rein die die Flaks und Flugzeuge ggf. steuert.
Ich möchte nun also die Performance verbessern und hab hier im Forum gelesen das man besser BufferStrategy nimmt statt dem standard DoubleBuffering das Swing macht.
Nur weiß ich leider nicht wie ich das realisieren soll, weil ich ja dann nur ein Graphics-Objekt vom ganzen Bildschirm habe und nicht mehr für jedes Panel ein Graphics-Objekt

Ich hab versucht die paintComponent Methoden direkt mit paintComponent(strategy.getDrawGraphics()) aufzurufen
=> zuerst malt die paintComponent von Panel1 den Bildschirm voll, dann die paintComponent von Panel2.
=> nur Panel2 ist sichtbar

Wie bekomme ich es nun hin das ich den Splitscreen behalte?


mfg
Christian
 
Hab jetzt eine Lösung gefunden (mal abgeshen davon das jetzt der Trennbalken fehlt):
Code:
Graphics g = strategy.getDrawGraphics();
paintPanel1.paintComponent(g.create(0,0,Dogfight.this.getWidth(),Dogfight.this.getHeight()/2));
paintPanel2.paintComponent(g.create(0,Dogfight.this.getHeight()/2,Dogfight.this.getWidth(),Dogfight.this.getHeight()/2));
strategy.show();

mit g.create bekomme ich einen Teil des "großen" Graphics-Objects.


Ist das so richtig? D.h. hab ich jetzt auch noch BufferStrategy oder bin ich wieder bei DoubleBuffering?
Die Auslastung liegt jetzt bei ca.30-45% (vorher ca.35-50%), also einen riesen Geschwindigkeits-Vorteil bringts nicht...
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben