アニメーションのちらつきをなくす方法。
表の画面と裏の画面を用意して表の画面をスクリーンイメージとする。
裏の画面にはじめの絵を描画し、表の画面に切り替える。
その間に裏の画面に次のイメージを描画する。このような処理をダブルバッファリングという。
以下に図を示す。
1.まず最初に裏画面とそこに描画するためのGraphicsオブジェクトを保持するためのインスタンス変数を生成する。
public class Simple extends Applet implements Runnable {
Image ura_im;
Graphics ura_g;
}
2.init()の中でImage型とGraphics型のオブジェクトを生成し、create()メソッドによってImageのインスタンスを生成する。
また、Graphicsオブジェクトを取得するためにgetGraphics()メソッドを呼び出す。
public class Simple extends Applet implements Runnable {
Image ura_im;
Graphics ura_g;
public void init() {
if (ura_g == null)
{
ura_im = this.createImage(150,250);
ura_g = ura_im.getGraphics();
}
}
}
3.裏画面に描画させるために、ura_g.drawImage()を用いて、paint()メソッドで裏画面を表画面に描き出す。
public class Simple extends Applet implements Runnable {
Image ura_im;
Graphics ura_g;
public void init() {
if (ura_g == null)
{
ura_im = this.createImage(150,250);
ura_g = ura_im.getGraphics();
}
}
・・・・・・・
public void paint (Graphics g) {
ura_g.setColor(getBackground());
ura_g.fillRect(0,0,150,250);
ura_g.drawImage(images[current],0,0,this); //(0,0)の位置から描画を行う
g. drawImage(ura_im, 0, 0, this); //表画面に描画を行う
}
}
4.update()をオーバーライドして画面を消さないようにする。
public class Simple extends Applet implements Runnable {
Image ura_im;
Graphics ura_g;
public void init() {
if (ura_g == null)
{
ura_im = this.createImage(150,250);
ura_g = ura_im.getGraphics();
}
}
・・・・・・・
public void paint (Graphics g) {
ura_g.setColor(getBackground());
ura_g.fillRect(0,0,150,250);
ura_g.drawImage(images[current],0,0,this);
g. drawImage(ura_im, 0, 0, this);
}
public void update (Graphics g) {
paint(g);
}
}
次のページ ホームに戻る