一方向運動リストに戻る    印刷する

一方向の直線運動…円の列(サイズ変化)

複数の円が、水平に列をなして、大きくなりながら、一定速度で運動します。 異なるサイズの円の列と同じ動きですが、個々の円の大きさが変化するところが違います。円の中心の間隔は固定値で、円のサイズが変化するため15と大きくしてあります。
 d[0] = 1;  //次のfor文はiが1から始まるため、先頭要素を別に初期化。
 for(int i=1; i<x.length; i++){
    d[i]= 1 ;  //円のサイズは最初1
    x[i]= x[i-1] - 15; //円のx座標の初期化、左に15離れたところに置く。
 }
円が画面に現れていない間は円の大きさを変えないようにします。そのため、画面上にあるかないかを表す値を入れておく配列を使います。画面上にあるかないかのどちらかなので、データ型はtrueかfalseのいずれかの値を保存するbooleanです。

このようにオン(真:true)かオフ(偽:false)かの値を入れておく変数のことをフラグと呼びます。

最初は画面上にないので、どの円もfalseです。
boolean on[] = new boolean[num];  //登場しているかどうか
numは、円の個数を格納しているint型変数です。このように、配列の定義の時、配列の要素数を変数で指定すると、要素の数が変わった時、numに入れる数を変えるだけで、他の部分を変更する必要がありません。

Your browser does not support the canvas tag.

クリックで停止⇔再開
【リスト StraightM4】
int num = 10;  //円の数
float s = 2; // 移動速度
float x[]  = new float[num]; // 位置(x座標)
float d[]  = new float[num]; // 円の直径
boolean on[] = new boolean[num];   //登場しているかどうか
float dd=0.3;  //直径の増加量

void setup() {
  size(150, 150);   //描画するための画面
  fill(0);
  d[0] = 1;
  for(int i=1;i<x.length;i++){
    d[i] = 1 ;
    x[i] = x[i-1] -15;
  }
}

void draw() { 
     background(255);   //画面背景を白でクリア
     for(int i=0;i<x.length;i++){
         x[i] = x[i]+s;
         if(x[i]>=width+d[i]/2) { //右に消えたら、左から現れる
            on[i] = false;
            x[i] = -15;  //左の隠れた位置から出る
            d[i] = 1;
         }else if(x[i]>=0) {
            on[i]=true;
         }
         if(on[i]) d[i] = d[i]+dd; //画面にある円は大きくする
         ellipse(x[i], height/2, d[i],d[i]);
     }
}

arigat アットマーク acm.org / copyright © info