/*
    スレッドを利用したアニメーション
    細かいテクニック導入
    MediaTracker, getSize()
*/
import java.applet.Applet;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.MediaTracker;

public class xAnime06 extends Applet implements Runnable {

    Thread xthKeeper;
    Image ximgBall, ximgBackGround;
    MediaTracker xtracker;  // 画像読み込み管理用
    Image xuraGamen;
    Graphics xuraGPen;

    int y = 0;
    
    public void init(){
        xuraGamen = createImage(getSize().width, getSize().height);
        xuraGPen = xuraGamen.getGraphics();

        xtracker = new MediaTracker(this);
        ximgBall     = getImage(getCodeBase(), "ball.gif");
        ximgBackGround = getImage(getCodeBase(), "bg.jpg");
        xtracker.addImage(ximgBall, 0);
        xtracker.addImage(ximgBackGround,0);
        try{
            xtracker.waitForAll();
        }catch(InterruptedException e){}
    }

    public void start(){
        xthKeeper = new Thread(this);     // スレッド生成
        xthKeeper.start();                // スレッド開始(ready状態へ)
    }

    // Runnable対象部分　スレッド実行の時間管理
    public void run(){
        while(true){                // 実行を継続する条件
            repaint();              // 繰返し仕事(画面書き換え)
            try {                   // 「指定したミリ秒の間，眠る」をモニタ
                Thread.sleep(50); // 
            }
            catch(InterruptedException xe){
            }
        }
    }

    // 画面に表示(繰返し仕事)
    public void paint(Graphics xgPen){

        y = y + 3;
        if (y>200){
             y = 0;
        }

        xuraGPen.drawImage(ximgBackGround,0,0,this);
        for(int i=0;i<30;i++){
            xuraGPen.drawImage(ximgBall, i*10, y, this);
        }
        xgPen.drawImage(xuraGamen, 0, 0, this);
    }

    public void update(Graphics xgPen){
        paint(xgPen);
    }
}

