# Java2D - Was ist die bewährte Rendermethode ?



## Kr0e (2. Mai 2012)

Hallo,

habe mit Java2D schon lange nichts gemacht (sonst nur OpenGL) aber muss damit nun ein kleines Game schreiben.

Ich wollte hier mal eben nach den best-practices fragen... Von damals hab ich noch so Begriffe wie BufferStrategy und DoubleBuffering bzw. VolatileImage im Sinn.

Aber was die "schnellste Variante" ist, wechselt ja teilweise bei den JDK Versionen. Ich arbeite mit einer 6er.


Ich habe bereits gelesen, dass BufferStrategy wohl recht fix sein soll. Aber ist ein JPanel z.b. nicht ebenfalls Doublebuffered ? Immerhin hat es eine Methode setDoubleBuffered()...

Dann noch eine Frage zu "active/passive" Rendering. Ich nehme an, mit passive ist das getimed-te Aufrufen von repaint() gemeinet, was ja lediglich einen Repaintbefehl sendet und nicht direkt ausgeführt wird. Ich nehme an, Aktiv-Rendering ist dann wohl die BufferStrategy Variante ??


Wäre nice, wenn ihr mir hier aktuelle Infos geben könntet, wie man "heutzutage" das Letzte aus Java2D rausholt. 

Viel Dank und Gruß,

Christopher


----------



## Volvagia (2. Mai 2012)

Die BufferStrategy hat keinen ("klassischen") Doppelbuffer. Ich weiß nicht mehr wie das heißt, aber dabei werden 2 - 4 Offscreen-Images erzeugt, diese abwechselnd befüllt und dann nur die Darstellung "umgelinkt". Swing ist doppelt gebuffert, deshalb geht damit einfach passives Rendern. Das bedeutet, dass du wie du sagtest nur ein repaint schickst. Der View hat z. B. eine List mit Paintable-Instanzen, Paintable ist ein Interface und definiert die Methode paint(Graphics g); In der paintComponent() wird z. B. die Liste durchgelaufen und von jeder Instanz paint(g) aufgerufen.
Im aktiven Rendern hast du eine Schleife, die ständig den Content zeichnet. Wäre auch über eine BufferStrategy möglich.

Allerdings würde ich dir abraten danach zu gehen was das Schnellste ist und es so zu machen, wie du am besten klar kommst. Höllisch schneller Code nützt dir rein garnichts, wenn du nur Probleme beim Bearbeiten und Erweitern hast. Optimierungen können am Ende immer noch durchgeführt werden, sofern es nicht schnell genug läuft.


----------



## Kr0e (3. Mai 2012)

Habs jetzt auf die einfache Tour gemacht (JPanel und paintComponent überschrieben + passives Rendern durch Timer)

Nen Krieg kann man mit der Renderperformance zwar nicht führen, aber für meine Zwecke ausreichend...


----------

