一方向の直線運動…円の列(サイズ変化)
複数の円が、水平に列をなして、大きくなりながら、一定速度で運動します。 異なるサイズの円の列と同じ動きですが、個々の円の大きさが変化するところが違います。円の中心の間隔は固定値で、円のサイズが変化するため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]);
}
}