Hallo zusammen,
ich werde die nächste Zeit viel mit Java zu tun haben und habe mich jetzt endlich 'mal hier angemeldet.
Zum Problem:
Ich programmiere momentan ein Plattformer-Spiel auf Basis von Vektor(svg)-Grafiken. Als unterstützende Library verwende ich Batik. Wärend des Spielverlaufes verschiebe ich logischerweise Spielfiguren, als auch mehrere Hintergrundebenen. Diese Elemente basieren alle auf dem JSVGCanvas (erbt von java.awt.Container) und stellen jeglichen SVG-Content dar.
Verschiebe ich eine Ebene, so wird diese aufgrund dieser Änderung neu gezeichnet:
Außerdem zeichnet sich dadurch wohl auch der ganze JFrame neu, da jeder dieser Container ein component des JFrames ist.
Da ich in jedem Frame mehr als ein Objekt verändere, wird meines erachtens nach viel zu oft alles neu gezeichnet, was zu Performance-Problemen führt.
Ich hatte nun deshalb den Ansatz verfolgt, die Container nicht dem JFrame hinzuzufügen, sondern pro Frame einmal "per Hand" in den Buffer zu zeichnen:
Hier komme ich jetzt überhaupt nicht mehr weiter. Best-Practice für das Zeichnen in den Buffer ist wohl
allerdings besitzt weder der JSVGCanvas noch ein AWT-Container die draw-Funktion.
Ich bin mir sicher, dass ich hier einen grundlegenden Denkfehler habe. Würde mich freuen wenn mich jemand in die richtige Richtung weisen könnte.
ich werde die nächste Zeit viel mit Java zu tun haben und habe mich jetzt endlich 'mal hier angemeldet.
Zum Problem:
Ich programmiere momentan ein Plattformer-Spiel auf Basis von Vektor(svg)-Grafiken. Als unterstützende Library verwende ich Batik. Wärend des Spielverlaufes verschiebe ich logischerweise Spielfiguren, als auch mehrere Hintergrundebenen. Diese Elemente basieren alle auf dem JSVGCanvas (erbt von java.awt.Container) und stellen jeglichen SVG-Content dar.
Verschiebe ich eine Ebene, so wird diese aufgrund dieser Änderung neu gezeichnet:
Java:
Container.setLocation(point);
Da ich in jedem Frame mehr als ein Objekt verändere, wird meines erachtens nach viel zu oft alles neu gezeichnet, was zu Performance-Problemen führt.
Ich hatte nun deshalb den Ansatz verfolgt, die Container nicht dem JFrame hinzuzufügen, sondern pro Frame einmal "per Hand" in den Buffer zu zeichnen:
Java:
BufferStrategy buffer = this.frame.getBufferStrategy();
buffer.getDrawGraphics();
Hier komme ich jetzt überhaupt nicht mehr weiter. Best-Practice für das Zeichnen in den Buffer ist wohl
Java:
mySprite.draw(g); // g = Buffer-Graphic
Ich bin mir sicher, dass ich hier einen grundlegenden Denkfehler habe. Würde mich freuen wenn mich jemand in die richtige Richtung weisen könnte.