インタラクションリストに戻る    印刷する

マウスの位置で波紋状の同心円が広がる

マウスボタンを押した時のマウスの位置で、波紋状の同心円が広がります。プログラミングの基礎知識の「クラスの定義」セクションの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();

Your browser does not support the canvas tag.

画面上でマウスプレス
【リスト 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;
      }
   }
  }
}
arigat アットマーク acm.org / copyright © info