一方向の直線運動…円の列(サイズ変化)
複数の円が、水平に列をなして、大きくなりながら、一定速度で運動します。 異なるサイズの円の列と同じ動きですが、個々の円の大きさが変化するところが違います。円の中心の間隔は固定値で、円のサイズが変化するため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に入れる数を変えるだけで、他の部分を変更する必要がありません。
クリックで停止⇔再開
【リスト 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]); } }