電子書籍の厳選無料作品が豊富!

現在、下記の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);
}
*************************************************

A 回答 (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);
  }
    • good
    • 0
この回答へのお礼

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

お礼日時:2003/06/10 13:09

画像と文字を重ねて(同じ場所に)表示させていて、


文字がちらついているのだと思いますが、
これは画像が表示される際に文字を上書きして消していることが原因です。

解決するには、

1.画像と文字を重ねない
  ->文字が画像によって消されることがなくなる


2.見えないところで表示するべきものを完成させて、
 完成したものを一気に表示する。

 ->ダブルバッファリング

のどちらかになります。

画像と文字を重ねたいのなら、ダブルバッファリングを使うしかありません。
    • good
    • 0
この回答へのお礼

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

お礼日時:2003/06/09 20:55

 誤解があるのかもしれませんが、文字も全てグラフィクスとして描画されます。

gに直接描画されているようですが、Javaならずとも画像のプログラミングでちらつきをなくするためにダブルバッファリングを実装するのは定石ではないでしょうか。

http://www.codec.co.jp/netscape/javascrl.html
http://www.wakhok.ac.jp/~tatsuo/kougi98/8shuu/do …
    • good
    • 0
この回答へのお礼

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

お礼日時:2003/06/10 13:11

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!