dポイントプレゼントキャンペーン実施中!

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%

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

宜しくお願いします。

A 回答 (1件)

 こんばんは。



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

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

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

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

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

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

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

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

参考URL:http://hp.vector.co.jp/authors/VA012735/java/dbu …
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/11/15 21:24

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