4

バッファ戦略と、Javadocで説明されている次の手法の使用を検討しています。

// 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());

}

EDTを避けinvokeLaterたりinvokeAndWait、アニメーションを実行する場合は素晴らしいでしょう。

私の質問:

  • showこれがSwingアプリケーションにある場合、EDTに電話をかけることを心配する必要はありませんか?
  • 他の誰かがSwingアプリでこれを使用して問題を見ることができますか?

これは、ゲームプログラミングに対するこの興味深い答えに触発されました。

4

2 に答える 2

3

一般的に、いいえ。イベントディスパッチスレッド(EDT)以外のスレッドにペイントすると、望ましくないアーティファクトが発生しますが、結果は許容できる場合があります。このは、いくつかのトレードオフを示しています。私はjavax.swing.Timerを使用してEDTを利用するように調整することを好みますが、他のアプローチも可能です。また、選択した最上位のコンテナは、すでにバッファ戦略を実装している場合があります。

于 2009-12-27T20:27:55.467 に答える
2

trashdogが述べたように、そうするのは良い考えではありません。画面外の画像を描画する独自のアニメーションスレッドを作成します。次に、それをいくつかのホルダーに押し込みます。paintComponentが呼び出された場合、現在の画像をフェッチしてコンポーネントに描画します。終わり。ランデブーパターンを見てください。

于 2010-01-02T19:40:13.460 に答える