マウスの位置で波紋状の同心円が広がる
マウスボタンを押した時のマウスの位置で、波紋状の同心円が広がります。プログラミングの基礎知識の「クラスの定義」セクションのAHamonクラスを使います。AHamonクラスのAPI(Application Programming Interface)にあるように、prepare()メソッドで同心円の中心を設定します。
AHamonクラスのprepare()メソッド void prepare(float xx, float yy) //波紋を準備、(xx, yy)に位置を決め、大きさを0にする。今は、マウスをプレスした時のマウスの位置を波紋の中心にしたいので、マウスのx、y位置をprepare()メソッドの引数に指定します。
波紋が広がっている途中で、マウスをプレスしても、完全に波紋が広がるまで、次の波紋を出さないようにするため、波紋が動いているかどうかの情報を変数moveを使って知ります。
AHamonクラスの変数move boolean move = false; //波紋が動いているか否か、動いていればtrueマウスがプレスされ、かつ波紋が動いていない時(変数moveがfalseの時)に、x、y座標を指定して、prepare()メソッドを実行します。
if(mousePressed && !hamon.move){//マウスがプレスされ、動いていない時 hamon.prepare(mouseX, mouseY); //マウスの位置で、波紋を開始 } hamon.display();
画面上でマウスプレス
【リスト Hamon1】 AHamon hamon; //AHamonオブジェクトを保存するための変数 void setup() { size(150, 150); frameRate(30); //波紋の最大値を指定し、波紋オブジェクトを生成 hamon = new AHamon(width*2); } void draw() { strokeWeight(0); //背景画面の四角には線を付けない fill(255, 75); //色は白、透明度を指定 rect(0,0,width, height); //背景を四角で塗りつぶす if(mousePressed && !hamon.move){//マウスがプレスされ、動いていない時 hamon.prepare(mouseX, mouseY); //マウスの位置で、波紋を開始 } hamon.display(); }
【リスト AHamon】 class AHamon{ int d; //直径 float x, y; //円の中央 float max; //円の最大値 int dr = 5; //円の直径の変化量 boolean move= false; //動いているかいないかのフラグ AHamon(float limit){ max = limit; } void prepare(float xx, float yy){ //座標を指定して波紋を準備 move=true; x = xx; y = yy; d= 0; //大きさをはじめに戻す。 } void display(){ strokeWeight(2); //線の太さを指定 if(move){ //動いている間の処理 d=d+dr; // 大きさを増加 ellipse(x, y, d, d); // 円を描く if(d>max){ //最大値を越えたので止める。 move = false; } } } }