Axel Richter: Animation ruckelt

Beitrag lesen

Hallo,

ich habe eine Reihe von Threads, die endlos Berechnungen für eine Grafik anstellen. Die vorletze Anweisung in der while (true) Schleife ist der Aufruf von repaint (int x1, int y1, int x2, int y2) in einem Canvas. Danach kommt sleep (100); In der paint-Methode des Canvas wird auf die von den Threads neu berechneten Daten zugegriffen und daraus ergibt sich die Grafik. Die Methode repaint (int x1, int y1, int x2, int y2) ist die Methode für die "Animation", d. h. ein Grafikteil, für den der Thread zuständig ist, wird von (x1; y1) nach   (x2; y2) verschoben. Es funktioniert alles, ausser dass das Bild fürchterlich flimmert. Wie kann man dieses Problem umgehen?

Such mal nach Beispielen für Java AWT Double Buffering. Der Trick ist, alle Veränderungen innerhalb eines zweiten Grafik-Kontext (Graphics buf) zu zeichnen. Die einzelnen kleinen Veränderungen verursachen nämlich das Flackern. Erst, wenn alles gezeichnet ist, wird aus dem gesamten Graphics buf mit createImage() das Image offScreenBuffer erzeugt. Dieses wird dann in einem Stück in den sichtbaren Grafik-Kontext gezeichnet.

Hier ist ein Beispiel, welches dafür eine eigene Klasse DBApplet erzeugt, in der es eine gepufferte Methode public void update(Graphics g) gibt.

http://developer.java.sun.com/developer/technicalArticles/Interviews/DoubleBuffering/

viele Grüße

Axel