配列を用いたアニメーション

 


【例】配列に座標(100,50), (200,50), (200,150), (100,150), (150,100) を代入し、その座標に直径50の円を表示する。
import java.applet.*;
import java.awt.Graphics;
public class animation2 extends Applet implements Runnable {
    int ax[]={100, 200, 200, 100, 150};
    int ay[]={50, 50, 150, 150, 100};
    int x=0,y=0;
    Thread thre;
    public void start() {  //Runnableでは最初にこの部分が実行される
        thre = new Thread(this);
        thre.start();
    }
    public void run() {  //この部分がスレッドとして実行される
        int i;
        for ( i=0 ; i<=4 ; ++i ) {
            x = ax[i];
            y = ay[i];
            repaint();
            try {
                Thread.sleep(1000);  //アニメーションの実行速度を調節
            }
            catch(InterruptedException e)  {
            }
        }
    }
    public void paint(Graphics g){
        g.drawOval(x,y,50,50);
    }
}



実行例


【注意】
配列の範囲を超えた場合(上の例だと、ax[5]以上を使った場合)はエラーとなるので注意!

このケースでは、コンパイル時にはエラーとはならないので注意が必要。
実行中に途中で止まるので原因が非常にわかりにくくなってしまう。

実行時エラーの例
Exception in thread "Thread-4" java.lang.ArrayIndexOutOfBoundsException: 5
at animation2.run(animation2.java:22)
at java.lang.Thread.run(Thread.java:619



【問題】
円(塗りつぶし)の直径を 20, 25, 35, 50, 55, 80, 105, 110, 140, 195 の10種類に変更しながら表示しなさい。
円の直径を配列に入れます。


実行例


【問題】
上の問題で、全ての円の色を変える(R、G、Bの値を配列にし、値を持たせる)ようにしなさい。


実行例


【問題】
上の問題で、表示を5回繰り返しなさい。
for 文を使って表示部分を5回繰り返します。


実行例



【問題】
上の問題で、左右キーでアニメーションの速度を変えなさい(← キーで遅く、→ キーで速くする)。
キーが押されたら、Thread.sleep( speed ); の変数speedの値を変化させます。


実行例


キー入力の方法はこちらを参照