import java.awt.*;
import java.applet.*;
import java.util.Vector;
public class ImageAnimator extends Applet implements Runnable {
protected MediaTracker tracker;
// イメージを保持するための Vector
protected Vector images;
// イメージ枚数
protected int number = 0;
// ダブルバッファリング用イメージ
protected Image buffer;
protected Graphics g2;
// 現在、表示しているイメージの番号
protected int index = 0;
// アプレットのサイズ
protected int width;
protected int height;
public void init(){
tracker = new MediaTracker(this);
images = new Vector();
// HTML からパラメータを読み込む
number = Integer.parseInt(getParameter("number"));
String filename = getParameter("filename");
String suffix = getParameter("suffix");
// イメージの読み込み
Image image;
for(int i = 0 ; i < number ; i++){
image = getImage(getDocumentBase(), filename + i + "." + suffix);
images.add(image);
tracker.addImage(image, 0);
}
}
public void start(){
// アニメーション用のスレッドをスタートさせる
Thread thread = new Thread(this);
thread.start();
}
public void run(){
try{
// イメージがロードされるまで待つ
tracker.waitForID(0);
}catch(InterruptedException e){
return;
}
while(true){
// 再描画
repaint();
// 表示するイメージの更新
index++;
if(index >= number){ // index がイメージの枚数より多くなった場合、
index = 0; // 0 に戻す
}
// スリープ
try{
Thread.sleep(100);
}catch(Exception ex){
return;
}
}
}
public void update(Graphics g){
// ちらつき防止のため、クリアは行わない
paint(g);
}
public void paint(Graphics g){
// buffer が生成されていなければ生成する
if(buffer == null){
// アプレットのサイズをえる
Dimension size = getSize();
width = size.width;
height = size.height;
// バッファイメージの生成
buffer = createImage(getSize().width, getSize().height);
g2 = buffer.getGraphics();
}
// バッファにイメージを描画
g2.clearRect(0, 0, width, height);
g2.drawImage((Image)images.elementAt(index), 0, 0, this);
// バッファイメージの描画
g.drawImage(buffer, 0, 0, this);
}
}