こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

アプレットで再描画をする時ちらつく

Javaアプレットで題名の通り再描画をするときにちらつきます。
ソースコードは大まかに表すとこのような感じです。


/*test.java*/

import java.applet.*
import java.awt.Image;

public class test extends Applet implements Runnable{

 int a = b = c = d = e = f = g = h = 0;
 Thread th;
 Image im;
 AudioClip au;

 public void init(){
  im = getImage(getDocumentBase('image.gif'););
  au = getAudioClip(getDocumentBase('test.wav'););
  a = c = e = g = 0;
  th = new Thread();
  th.start();
  au.loop();
 }
 public void run(){
  try{
   while(true){
    repaint();
   }
  }catch(){例外処理}
 }
 public void stop(){
  au.stop();
 }
 public void paint(Graphics g){
  g.drawImage(im,a,b,c,d,e,f,g,h);
 }
}



test.gif = 6KB
test.wav = 400KB

ついでに書いておきます。

OS:Me
CPU:AMD アスロン 800MHz
メモリ:256MB
起動時のリソース残量:77%

上のソースコードはうろ覚えなので、
間違えている箇所があるかもしれませんが、
コンパイルは正常に終了し、起動時エラーもありません。

宜しくお願いします。

投稿日時 - 2005-11-15 18:20:24

QNo.1780918

困ってます

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

 こんばんは。

 コードが不完全なので、何がしたいのかよくわからないのですが、たぶん、絵が移動するアニメーションか何かをしたいのだと思います。

 ここでちらついてしまうのはコンポーネントの再描画方法に原因があります。

 Appletのrepaintメソッドを呼んでいますが、ここから何がおきるかというと、

repaintメソッド
 ↓
updateメソッド
コンポーネントの背景色で塗りつぶしが行われ、paintメソッドを呼ぶ。
 ↓
paintメソッド
絵を描く。

 つまり、repaintが何度も呼ばれることによって、

塗りつぶし→絵を描く→塗りつぶし→絵を描く

 が、何度も繰り返され、ちらつきになってしまうのです。

 これを回避するためにダブルバッファリングという方法があります。
 参考URLを載せておきますので、勉強してみてください。

参考URL:http://hp.vector.co.jp/authors/VA012735/java/dbuf1.htm

投稿日時 - 2005-11-15 19:14:34

お礼

早速実行させていただいたところ
殆ど、ちらつかなくなりました。
迅速なご回答ありがとうございました。

投稿日時 - 2005-11-15 21:24:10

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問