Wie implementiere ich Double Buffering

Status
Nicht offen für weitere Antworten.

hdi

Top Contributor
Hallo,

siehe Titel, habe mir das Sun-Tutorial dazu angesehen, muss aber gestehen dass ich damit nicht so viel
anfangen kann. Ich verstehe das Konzept von Double Buffering, aber ich weiss nich wie ich es umsetze.

Kann mir vllt jmd. einen 3-Zeiler schreiben, der mir folgendes:

Code:
@Override
protected void paintComponent(Graphics g){
        g.drawRect(xPos,yPos,objectWidth,objectHeight);
}
auf einem JPanel mit Double Buffering Technologie umsetzt? So dass wenn ich zB 100 mal in der Sekunde
die Position verändere und ein repaint() aufrufe, es nicht flackert?

Wär sehr nett, danke schön :toll:
 

L-ectron-X

Gesperrter Benutzer
Swing-Komponenten sind bereits gepuffert, DoubleBuffering ist nicht mehr nötig.
Man kann's sogar ein- und ausschalten.

Es gibt auch Threads im Forum, die das Thema behandeln.

100 mal in der Sekunde ist vielleicht unnötig, das menschliche Auge nimmt Bildwechsel bereits ab 25 Bildern/s als flüssige Bewegung wahr.
 

hdi

Top Contributor
Achso das ist schon so, ok danke wusste ich nicht.

PS: Vllt gilt 25fps als "flüssig", aber zwischen 25 und >50-60 merkt man deutlich einen Unterschied in Spielen zB
 
G

Gelöschtes Mitglied 5909

Gast
Das ist was anderes herr gamer, weil du dich in den spielen meist selber bewegst und dadurch kommt deine bewegung ggf zu spät an. Normale Filme/Videoclips haben auch nur 25 oder 30 fps.
 

hdi

Top Contributor
raiL hat gesagt.:

:?:

weil du dich in den spielen meist selber bewegst und dadurch kommt deine bewegung ggf zu spät an.
Das verstehe ich irgendwie nicht. In Filmen passiert ja z.T. auch sehr viel in einer Sekunde, aber dort sieht es mit 25 fps vollkommen flüssig aus. Was macht es jetzt für einen Unterschied wenn ich mich im Spiel bewege und nicht jeder Step gemalt wird? Ich meine in spielen bewegt man sich ja nicht schneller als eine Kamera in einem Film sich z.B. dreht.

Kapier das grad echt nicht ???:L
 
G

Gelöschtes Mitglied 5909

Gast
Nunja einerseits kommt es in gewissen spielen auf die Reaktionsgeschwindigkeit an, andererseits hast du in einem spiel nie konstante frameraten weil sich die Landschaft ändert und teilweise rechenintensiver / weniger rechenintensiver wird. Wenn es nur kurz unter 25 fps geht dann merkt man das.
 

Quaxli

Top Contributor
Zudem orientiert sich in Spielen die Bewegung der Figur an der Framerate. Wenn Du eine hohe Framerate hast, sind die Bewegungs-Intervalle entsprechend feiner und die Bewegung scheint damit flüssiger, weil Schwankungen, wie von raiL angesprochen, nicht so auffallen.

<edit>
Was Du vermutlich meinst ist nicht Doppelpufferung, sondern aktives Rendern. Google mal z. B. nach "Killer Game Programming" da dürftest Du einige Hinweise finden.
</edit>
 

javaianer

Mitglied
Sollte trotzdem bei Swing ein Flackern auftreten, egal bei welchem Container (JPanel JLabel, ect.) kann man dagegen dann noch irgendwas machen?
 

javaianer

Mitglied
Was soll mir das sagen?

Oder kann bei swing eh nie was flackern?

Ich hab grad mal das hier gefunden:
Code:
g2.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_SPEED);
 
Zuletzt bearbeitet:

Marco13

Top Contributor
Und was soll MIR DAS jetzt sagen? ;)
Das bezog sich nur darauf, dass bei Swing "eigentlich" nichts Flackern kann, außer, wenn man explizit etwas programmiert, was Flackern verursacht...
Code:
while (true)
{
    toggleColor();
    repaint();
}
;)
 

André Uhres

Top Contributor
Wenn es darum geht, die Leistungsfähigkeit einer Swing Komponente zu steigern, kann man entweder die "passive Maltechnik" oder die "intelligente Maltechnik" einsetzen (oder auch beide).
Bei der "passiven Maltechnik" wird nicht direkt auf die Komponente gemalt, sondern auf ein Image, das man dann in paintComponent mit einem einzigen drawImage auf die Graphics der Komponente überträgt.
Die "intelligente Maltechnik" versucht die Clip Informationen zu benutzen, um den Malbereich auf ein kleineres Rechteck zu beschränken (Graphics#getClipBounds), anstatt immer die gesamte Komponente zu malen. Dies setzt die Verwendung der "multi arguments" Version der "repaint" Methode voraus, welche das zu malende Rechteck definiert.
 

icarus2

Top Contributor
@hdi:

Vielleicht kennst du das ja bereits, aber hier im Forum gibt es ein super Tutorial zum Spiele Programmieren, das ich selber gerade am lesen bin.

Ab Seite 10 ist da etwas über Zeitmessung geschrieben und im folgenden wird erklärt, wie man die Bewegungen aktualisiert in Abhändigkeit der Zeitmessungen, so dass der Bildverlauf flüssig ist. (Ich kann es leider nicht erklären, da ich es selber noch nicht zu 100% verstehe).

Irgendwo steht glaube ich auch etwas über aktives Rendering.

2D-Spieleprogrammierung


Ich hoffe das hilt.

Mfg ica
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
K GUI,MVC und Oberservable.Wie implementiere ich es am besten? AWT, Swing, JavaFX & SWT 5
CptK Point2D.Double Kurven - Beschriftung und richtiges Anklicken AWT, Swing, JavaFX & SWT 7
CptK Wie funktioniert contains() für Path2D.Double AWT, Swing, JavaFX & SWT 10
B AWT GUI nimmt nur 19 Ziffern an, obwohl Max Wert von Double größer ist AWT, Swing, JavaFX & SWT 7
T Swing Double Click bei Buttons in JTable AWT, Swing, JavaFX & SWT 9
L 2D-Grafik Frage zu Ellipse2D.Double, Abfrage, ob Punkt enthalten ist funktioniert nicht AWT, Swing, JavaFX & SWT 3
S Polygon mit double-Koordinaten AWT, Swing, JavaFX & SWT 2
N Double Buffern von BILDERN AWT, Swing, JavaFX & SWT 6
V Applet Double Buffering AWT, Swing, JavaFX & SWT 2
B Graphics2d drawString mit double Werten? AWT, Swing, JavaFX & SWT 5
O 2D-Grafik Rectangle mit double Werten zeichnen AWT, Swing, JavaFX & SWT 3
T 2D-Grafik Double Buffering AWT, Swing, JavaFX & SWT 7
lumo SWT Double Buffering AWT, Swing, JavaFX & SWT 5
M Object[][] in double[][] casten AWT, Swing, JavaFX & SWT 6
A aus einem Textfeld in double parsen AWT, Swing, JavaFX & SWT 10
K Flackern trotz Double-Buffering AWT, Swing, JavaFX & SWT 10
J JSlider mit Double Werten AWT, Swing, JavaFX & SWT 5
T JTextField nur Double werte eingeben AWT, Swing, JavaFX & SWT 2
A Explicit casting Point2D.Double AWT, Swing, JavaFX & SWT 3
A TableRowSorter für double Werte mit Formatierung AWT, Swing, JavaFX & SWT 3
iLoveTheInternet AWT Rectangle2D.Double intersecs AWT, Swing, JavaFX & SWT 6
R drawString mit double Koordinaten AWT, Swing, JavaFX & SWT 5
L JTextField Umwandeln in double-Werte AWT, Swing, JavaFX & SWT 5
K double / int einlesen? AWT, Swing, JavaFX & SWT 12
G Frage zu Double Buffering AWT, Swing, JavaFX & SWT 4
L double in JTable formatieren AWT, Swing, JavaFX & SWT 7
P Integer, Double, etc mit getTableCellRendererComponent AWT, Swing, JavaFX & SWT 6
P Double-Werte sortieren mit TableRowSorter AWT, Swing, JavaFX & SWT 2
U Double Buffering AWT, Swing, JavaFX & SWT 6
B JFormattedTextField mit DecimalFormat in ein Double AWT, Swing, JavaFX & SWT 11
J Double-Buffering zu langsam AWT, Swing, JavaFX & SWT 4
S double in String umwandeln AWT, Swing, JavaFX & SWT 6
L Double-Buffering AWT, Swing, JavaFX & SWT 2
R Double in der Tabelle statt String und Integer AWT, Swing, JavaFX & SWT 3
Student "Dicke" einer Linie - Line2D.Double AWT, Swing, JavaFX & SWT 12
G Double-Click f. alle Komps UNIX u. WIN verschieden ? AWT, Swing, JavaFX & SWT 5
D double Buffering abschalten? AWT, Swing, JavaFX & SWT 4
G Ellipse2D.Double funktioniert nicht AWT, Swing, JavaFX & SWT 3
W SWT - Tree: Problem mit Double-Click expand AWT, Swing, JavaFX & SWT 5
L Double Buffering bei JTable AWT, Swing, JavaFX & SWT 4
K AWT flackern trotz buffering AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben