• ベストアンサー

ペイント時のチラツキ予防方法について

現在、下記のpaint関数がrepaint関数を使って50ミリ秒きざみで呼ばれます。すると、画面がチラツクのです。 良い方法はありませんでしょうか? ちなみにdrawImageしている絵は最初の一回だけ描画して、 その絵の上にdrawStringを使ってミリ秒単位で字が書かれるのです。 ************************************************** public void paint(Graphics g) { if (g.drawImage(im, 0, 0, this) != true) { System.out.println("Song_ng"); }else{ //A描画 g.setColor(Color.black); g.setFont(FontA); g.drawString(strTitleA, 90, 25); //B描画 g.setColor(Color.black); g.setFont(FontB); g.drawString(strTitleB, 5, 55); //C描画 g.setColor(Color.black); g.setFont(FontC); g.drawString(strTitleC, 15, 85); //D描画 g.setColor(Color.black); g.setFont(FontD); g.drawString(strTitleD, 105, 120); } } ************************************************* 私なりに画面のチラツキ防止のためにupdate関数を下記のように修正したのですが、チラツキが良くはなりません。 ************************************************* public void update(Graphics g){ paint(g); } *************************************************

質問者が選んだベストアンサー

  • ベストアンサー
  • ngsvx
  • ベストアンサー率49% (157/315)
回答No.3

#2です。 ダブルバッファリングについて概略だけ説明します。 大きく分けて、2つの作業が必要です。 A.paintメソッド内でのロジック 1.隠し画面用のメモリを確保   Image buff = createImage( ... ); //java.awt.Compenentのメソッド 2.隠し画面に書き込むためのグラフィックコンテキストを取得   Graphics g2 = buff.getGraphics(); 3.画面を完成させる   g2.drawText( ... ); 4.完成したものを一気に表示   g.drawImage(buff, ...... ); B.updateメソッドをオーバーライド   //updateメソッドは一度画面を消去して再描画するため、上書きして消去させない   public void update(Graphics g){     paint(g);   }

t-tree
質問者

お礼

非常にわかりやすいご説明ありがとうございました。 教えていただいた点を踏まえて組んでみようと思います。 本当にありがとうございました。

その他の回答 (2)

  • ngsvx
  • ベストアンサー率49% (157/315)
回答No.2

画像と文字を重ねて(同じ場所に)表示させていて、 文字がちらついているのだと思いますが、 これは画像が表示される際に文字を上書きして消していることが原因です。 解決するには、 1.画像と文字を重ねない   ->文字が画像によって消されることがなくなる 2.見えないところで表示するべきものを完成させて、  完成したものを一気に表示する。  ->ダブルバッファリング のどちらかになります。 画像と文字を重ねたいのなら、ダブルバッファリングを使うしかありません。

t-tree
質問者

お礼

お答えありがとうございました。 >ダブルバッファリング との事ですが、どのように書けばよいのですか?

  • nta
  • ベストアンサー率78% (1525/1942)
回答No.1

 誤解があるのかもしれませんが、文字も全てグラフィクスとして描画されます。gに直接描画されているようですが、Javaならずとも画像のプログラミングでちらつきをなくするためにダブルバッファリングを実装するのは定石ではないでしょうか。 http://www.codec.co.jp/netscape/javascrl.html http://www.wakhok.ac.jp/~tatsuo/kougi98/8shuu/double2.html

t-tree
質問者

お礼

お答えありがとうございました。 教えていただいたURLを参考にダブルバッファリングで組んでみようと思います。 ありがとうございました。

関連するQ&A