Frage

Ich bin auf der Suche in mit Buffer-Strategie und die folgende Technik auf dem Javadoc beschrieben:

// Main loop
while (!done) {
 // Prepare for rendering the next frame
 // ...

 // Render single frame
 do {
     // The following loop ensures that the contents of the drawing buffer
     // are consistent in case the underlying surface was recreated
     do {
         // Get a new graphics context every time through the loop
         // to make sure the strategy is validated
         Graphics graphics = strategy.getDrawGraphics();

         // Render to graphics
         // ...

         // Dispose the graphics
         graphics.dispose();

         // Repeat the rendering if the drawing buffer contents 
         // were restored
     } while (strategy.contentsRestored());

     // Display the buffer
     strategy.show();

     // Repeat the rendering if the drawing buffer was lost
 } while (strategy.contentsLost());

}

Es wäre toll, EDT und invokeLater oder invokeAndWait zu vermeiden, wenn eine Animation durchführen.

Meine Fragen:

  • Wenn dies in einer Swing-Anwendung gehen wir nicht zu kümmern brauchen, um über den Anruf zu show am EDT setzen?
  • siehe
  • Kann jemand sonst Probleme mit der Bedienung dieses in einem Swing-app?

Dies wurde von dieser interessanten Antwort Spiele-Programmierung inspiriert.

War es hilfreich?

Lösung

In der Regel nicht. Malerei auf einem anderen Thread als der Event Dispatch Thread (EDT) < a /> Ergebnisse in unerwünschten Artefakte, obwohl die Ergebnisse können akzeptabel sein. Diese Beispiel zeigt einige der Kompromisse. Ich ziehe die Anordnung auf dem EDT ziehen mit javax.swing .Timer , aber andere Ansätze möglich sind. Auch gewählten Top-Level Container kann implementieren bereits eine Buffer Strategie .

Andere Tipps

Wie bereits erwähnt durch trashdog es nicht sinnvoll ist, dies zu tun. Erstellen Sie eigene Animation Threads, Bild wird draw-Bildschirm aus. Dann schieben Sie es bis zu einem gewissen Halter. Wenn paintcomponent genannt aktuelles Bild holen und sie auf Komponente zeichnen. Getan. Schauen Sie sich Rendezvous Muster.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top