Hallo!
Da die auf einem JPanel gezeichneten GIF's in meinem 2D-Spiel beim bewegen leicht flimmern, versuche ich noch schon eine Weile Double Buffering umzusetzten, aber irgendwie will das nicht so recht klappen.
Natürlich habe ich schon viel gegoogelt und auch hier im Forum die Suchfunktion benutzt, ich konnte jedoch nun noch nicht herausfinden, wie man in meinem Beispiel am besten vorgeht.
In der Main Methode des Programms wird zunächst ein neues "Frame" erzeugt, in welches dann eine von JPanel erbende Klasse "World" gesetzt wird.
In der Klasse "World" wird regelmäßg repaint(); ausgeführt. Stark vereinfacht läuft es auf folgendes hinaus:
Innerhalb des Objectes gibt es nun folgende Methode (stark vereinfacht):
Meine Frage nun: Wie lässt sich in diesem Beispiel nun am besten Double Buffering umsetzten?
Danke!
Da die auf einem JPanel gezeichneten GIF's in meinem 2D-Spiel beim bewegen leicht flimmern, versuche ich noch schon eine Weile Double Buffering umzusetzten, aber irgendwie will das nicht so recht klappen.
Natürlich habe ich schon viel gegoogelt und auch hier im Forum die Suchfunktion benutzt, ich konnte jedoch nun noch nicht herausfinden, wie man in meinem Beispiel am besten vorgeht.
In der Main Methode des Programms wird zunächst ein neues "Frame" erzeugt, in welches dann eine von JPanel erbende Klasse "World" gesetzt wird.
Java:
public class Frame extends JFrame{
public Frame(){
new JFrame();
add(new World(1920,1920,this));
setTitle("2-D Test Game");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(800,600);
setVisible(true);
setLocationRelativeTo(null);
setResizable(false);
}
In der Klasse "World" wird regelmäßg repaint(); ausgeführt. Stark vereinfacht läuft es auf folgendes hinaus:
Java:
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
TestObject1.drawObjects(g);
AnotherObject.drawObjects(g);
}
Innerhalb des Objectes gibt es nun folgende Methode (stark vereinfacht):
Java:
public void drawObjects(Graphics g) {
calcRotation();
Graphics2D g2d = (Graphics2D)g.create();
g2d.rotate(Math.toRadians(rotation), x, y);
g2d.drawImage(image,x,y, null);
}
Meine Frage nun: Wie lässt sich in diesem Beispiel nun am besten Double Buffering umsetzten?
Danke!