INDEX(各項目ごとの目次)

[HOME]  [Processing関係]  [Arduino関係]  [マテリアル関係]  [秋葉原工作マップ]

2008年用ですが、部分的に内容を更新しています(2010/06/14)。
また、[建築農業工作ゼミ2009-2010]とも連動していますので、そちらにも幾つかサンプルがあります。
:

5/13/2008

Processing マウス入力4

今までのボタン操作において、「押したらオン、放したらオフ」になるというプログラムを書いてきましたが、「押したらオン、もう一回押したらオフ」になるトグルスイッチというものもあります。トグルスイッチのプログラムには、変数を用意しておいて、オンやオフになっている状態を記憶させておく必要があります。そのようなものをフラグといいます。サンプルとして、正方形をクリックし、オンなら緑、オフなら赤というプログラムを書きます。まず、オン/オフ用としてflag(変数名は任意)という変数を用意しておきます。いままで使ってきたint型の変数を使うことも可能ですが、オン/オフの二つの状態しかないので、より単純なboolean型の変数を用います。変数の値としては、truefalseだけになります。つまり、flagがtrueのときは、スイッチがオンになっている状態とし、flagがfalseのときはオフになっている状態であるという設定にします。

boolean flag; //boolean型の変数flagを用意

void setup(){
//画面サイズ
size(400,200);
//スイッチの初期値はfalse(オフ)に設定
flag=false;
//図形の初期色を赤(オフ)に設定
fill(255,0,0);
}

void draw(){
background(100);
rect(200,100,50,50);
}

void mousePressed(){
//マウス座標が正方形の範囲内の時
if(mouseX>=200 && mouseX<=250 && mouseY>=100 && mouseY<=150){
if(flag==false){ //クリックする前がオフの時
fill(0,255,0);
flag=true; //クリックしたらオンの状態に変更する
}else{ //クリックする前がオンの時
fill(255,0,0);
flag=false; //クリックしたらオフの状態に変更する
}
}
}

if()内の条件式では、flag==falseというように「==」イコールを二つ用いて下さい。ただし、その後の「クリックしたらオンの状態に変更する」箇所では、flag=trueというように「=」イコールが一つになります。
フラグを用いることで、もう既に済んでしまっている出来事の状態を記憶させておくことができます。それに応じて、条件式を設定すれば、より複雑な状況をプログラムしていくことが可能になります。例えば3回押したらオンになるスイッチもint型変数をカウントとして使えば可能となります。

boolean flag; //オンかオフを判定するフラグ変数
int count; //クリック回数をカウントする変数

void setup(){
size(400,200);
flag=false; //オフに設定しておく
fill(255,0,0);//正方形の色(オフ)を赤にしておく
count=0; //0回目に設定しておく
}

void draw(){
background(100);
rect(200,100,50,50);
}

void mousePressed(){
if(mouseX>=200 && mouseX<=250 && mouseY>=100 && mouseY<=150){
count++; //正方形内をクリックするごとに回数が+1される
if(count>=3){ //クリック回数が3以上なら
if(flag==false){ //スイッチがオフなら
fill(0,255,0); //緑(オン)に変更する
flag=true; //スイッチをオンに変更する
}else{ //スイッチがオンなら
fill(255,0,0); //オフ(赤)に変更する
flag=false; //スイッチをオフに変更する
}
count=0; //カウントを0に戻す
}
}
}

クリックされる前の状態がオンのときはオフへ、オフのときはオンへ切り替えるboolean型の変数flagと同時に、クリック回数を記憶しておくint型変数countがあります。それぞれ切り替わる際には、flagをfalseからtrueへ、あるいはtrueからfalseへ、そして回数も3から0へと変更するような後処理についても忘れずプログラムしておく必要があります。

0 件のコメント:



[目次:Processing関係]  [HOMEへ戻る]  [目次:Arduino関係]