Guten Abend,
ich beschäftige mich seit längerem mit dem Thema DoubleBuffering unter Swing. Prinzipiell verfügt Swing bereits über DoubleBuffering, jedoch flackern einige Elemente trotzdem deutlich. Habe daher ein DoubleBuffering selber implementiert, jedoch zeigt sich kaum eine Besserung. Ich weiß einfach nicht, wie ich das beheben soll.
Zum Zeichnen in der paintComponent:
Es werden sechs Säulen (Rectangles) gezeichnet, sobald diese außerhalb des Bildschirmes sind, werden diese aus einer Liste gelöscht und nicht mehr gezeichnet. Das Flackern tritt aber bereits bei der ersten Säule auf, deutlich von unten nach oben erkennbar.
Vielleicht hat von euch ja jemand einen guten Ratschlag.
Lieben Gruß
So sieht momentan die JComponent aus:
ich beschäftige mich seit längerem mit dem Thema DoubleBuffering unter Swing. Prinzipiell verfügt Swing bereits über DoubleBuffering, jedoch flackern einige Elemente trotzdem deutlich. Habe daher ein DoubleBuffering selber implementiert, jedoch zeigt sich kaum eine Besserung. Ich weiß einfach nicht, wie ich das beheben soll.
Zum Zeichnen in der paintComponent:
Es werden sechs Säulen (Rectangles) gezeichnet, sobald diese außerhalb des Bildschirmes sind, werden diese aus einer Liste gelöscht und nicht mehr gezeichnet. Das Flackern tritt aber bereits bei der ersten Säule auf, deutlich von unten nach oben erkennbar.
Vielleicht hat von euch ja jemand einen guten Ratschlag.
Lieben Gruß
So sieht momentan die JComponent aus:
Java:
public class GamePanel extends JComponent{
private Image backBuffer;
public GamePanel(){
setDoubleBuffered(false);
}
public void createBackBuffer(){
backBuffer = createImage(getWidth(), getHeight());
}
@Override
protected void paintComponent(Graphics g){
updateScreen();
}
public void renderScreen(){
if(backBuffer == null)
createBackBuffer();
Graphics g = backBuffer.getGraphics();
//CLEAR
g.setColor(Color.cyan);
g.fillRect(0,0, game.WIDTH, game.HEIGHT);
//
game.render(g);
}
public void updateScreen(){
Graphics g = getGraphics();
if(g != null)
if(backBuffer != null) g.drawImage(backBuffer, 0, 0, null);
else{
createBackBuffer();
renderScreen();
}
}
}