# Java2D Spiel, beim Hinzufügen eines Bildes ruckelt das ganze



## thomas.g (30. Sep 2005)

Hi, ich muss für unseren "Tag der offenen Tür" in der Schule ein nettes Spiel programmieren um es dann präsentieren zu könne, ich habe bereits eine Idee, allerdings kann ich es nicht ganz umsetzen und benötige Hilfe.

Das Spiel funktioniert so: Man hat unten einen Balken, den man mit der Tastatur steuern kann, oben fliegt ein Ball der bei berührung der Steine die sich im Spielfeld befinden diese Steine zerstört; gewonnen hat man, wenn man alle Steine mit dem Ball vernichtet hat, allerdings verliert man, wenn der Ball den Boden berührt.

Das Problem liegt darin, dass ich einen Thread gemacht haben, der alle 20 millisekunden ein repaint() macht. Bisher ging ja alles super doch nun wollte ich so ne art "Engine" einbauen; damit meine ich Bilder statt Pixel und Polygonen weil es einfach besser aussieht.

Das Spiel geht jetzt aber schleppend und ich weiß nicht mehr weiter. Ich habe es mit BufferedImage statt Image versucht, doch geht auch nicht. Ich habe statt JComponent, Component genommen; geht auch nicht. Es ruckelt einfach immer.

Nun bin ich allerdings hier im Forum auf was gestoßen: Ich zeichne immer nur das neu, was sich verändert hat. Doch wie soll ich das anstellen? Denn, ich habe viele Animationen (Wolken, Hintergrund, .....) eingebaut. 


PS: Dieses Problem mit dem Ruckeln oder schleppenden zeichnen der Animationen habe ich auch bei meinem Hauptprojekt den MediaPlayer. Die Visualisierungen werden obwohl sie eigentlich ganz simple sind, nicht schnell genug gezeichnet.


Ich würde mich sehr darüber freuen, wenn mir das jemand erklären könnte, wie ich flüßige Animationen in Spielen als auch sonst wo erzeugen kann.

thx, thomas


----------



## 0xdeadbeef (30. Sep 2005)

Erzeuge Deine BufferedIMages per createCompatibleImage. Siehe dazu auch hier:
http://www.java-forum.org/de/viewtopic.php?t=20670

Bei einem festen Hintergrund, der weder scrollt noch animiert ist, könnte auch "dirty rectangle clipping" was bringen. Auch im obigen Thread beschrieben.


----------



## thomas.g (30. Sep 2005)

ich habe eine lösung gefunden, ist allerdings noch nicht ganz optimal. Und zwar verwende ich statt .png, .gif dateien, das Beschleunigt anscheinend das ganze und es ruckelt nicht mehr, könnte aber noch ein bisschen besser sein.

Da ich JComponent zum Zeichen benutze, glaube ich bring PageFlipping oder Doublebuffering usw nichts. Hab ich da recht?


----------



## 0xdeadbeef (30. Sep 2005)

thomas.g hat gesagt.:
			
		

> ich habe eine lösung gefunden, ist allerdings noch nicht ganz optimal. Und zwar verwende ich statt .png, .gif dateien, das Beschleunigt anscheinend das ganze und es ruckelt nicht mehr, könnte aber noch ein bisschen besser sein.


Die Quelle sollte egal sein. Wie gesagt: benutz BufferedImages, die per createCompatibleIMage erzeugt wurden. Dadurch können diese Images von Hardwarebeschleunigung profitieren.



> Da ich JComponent zum Zeichen benutze, glaube ich bring PageFlipping oder Doublebuffering usw nichts. Hab ich da recht?


PageFlipping im engeren Sinne funktioniert eh nur im Fullscreen. DoubleBuffering unterdrückt Flackern, macht den Bildaufbau aber natürlich eher langsamer als schneller. Trotzdem solltest Du Deinen Krempel erstmal in ein Image bzw. dessen Graphics2D-Objekt zeichnen und das komplette Bild dann in einem Rutsch in der Paint-Methode Deiner JComponent per g.drawImage() o.ä. Damit hast Du dann Dein eigenes DoubleBufferind und kannst das der Komponente deaktivieren.


----------

