◆PROCESSING 逆引きリファレンス
カテゴリー:キーボード・マウス処理
マウスのどのボタンが操作されたか調べるには
システム変数 mouseButton を調べる直前に操作されたマウスボタンの情報を格納しているシステム変数です。PROCESSINGで扱えるマウスボタンの種類は LEFT, CENTER, RIGHTの何れかです。
●イベント関数に渡される MouseEventオブジェクトを利用する
mousePressed、mouseClicked、mouseReleasedの各イベント関数には、MouseEvent型のインスタンス変数を受け取るものがあります。
このインスタンス変数のメソッドやプロパティを参照する事で、操作されたマウスボタンの種類を知ることが可能です。
【構文】
システム変数:
int mouseButton;
イベント関数:
void mousePressed(event){ … }
void mouseClicked(event){ … }
void mouseReleased(event){ … }
【パラメータ】
MouseEvent : event : マウスイベントオブジェクト
MouseEventオブジェクトについては「マウスボタンが押された事を判定するには」記事で解説していますので、そちらも参照してください。
【戻り値】
イベント関数の戻り値は void
【注意】
mouseButtonシステム変数には、直前に操作されたボタンの情報が格納されます。
例えば左ボタンを押した直後に右ボタンを押した場合、 mouseButton には「左ボタン(LEFT)」という情報が格納され、その後直ちに「右ボタン(RIGHT)」という情報が格納されます。
実はPROCESSINGには、発生したマウスイベントそのものを記憶するmouseEventというシステム変数も用意されています。
これを使えば、mouseButtonなどのイベント関数に渡されるMouseEvent型のインスタンスと同じ処理が行えます。
【関連記事】
- マウスのダブルクリックを判定するには
- マウスボタンが離された事を判定するには
- マウスが動かされた事を判定するには
- マウスホイールを判定するには
- マウスボタンが押された事を判定するには
- マウスポインタの座標を知るには
●ボタンを判定する例1:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
void setup(){ size(200,200); frameRate(30); } void draw(){ if( mousePressed == true ){ if( mouseButton == LEFT ){ println( "左が押された" ); } else if( mouseButton == RIGHT ){ println( "右が押された" ); } else { println( "その他が押された" ); } } } |
実行結果ウィンドウでマウスボタンを押下すると、押されたボタン内容をデバックウィンドウに表示します。
●ボタンを判定する例2:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
void setup(){ size(200,200); frameRate(30); } void draw(){ background(255); } void mouseClicked(MouseEvent e ){ if( e.getButton() == LEFT ){ println( "左が押された" ); } else if( e.getButton() == RIGHT ){ println( "右が押された" ); } else { println( "その他が押された" ); } } |
mouseClicked()イベント関数に渡される MouseEvent型のインスタンス変数を利用して、クリックされたボタンの種類をデバックウィンドウに表示しています。
●左右ボタンの同時押しを検知する例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
ArrayList<Boolean> al; void setup(){ size(200,200); frameRate(30); //配列初期化 al = new ArrayList<Boolean>(); al.add(false); al.add(false); } void draw(){ background(255); } void mousePressed( MouseEvent e){ if( e.getButton() == LEFT ){ al.set(0,true); //左押下 } else { al.set(1,true); //右押下 } //状態表示 if( al.get(0) == true && al.get(1) == true ){ println( "両ボタン押下中" ); } else { println( "片方のボタン押下中" ); } } void mouseReleased( MouseEvent e){ if( e.getButton() == LEFT ){ al.set(0,false); //左を離した } else { al.set(1,false); //右を離した } //状態表示 if( al.get(0) == false && al.get(1) == false ){ println( "両ボタンを離している" ); } else { println( "片方のボタン押下中" ); } } |
注意に記載したように、mouseButtonシステム変数には、直前に操作されたボタンの情報のみが格納されています。そのままでは、マウスボタンを複数同時に押したり離した事が検知できません。
上記例ではイベント関数を利用する事で、ボタンが操作された際に、どのボタンが操作されたのかをArrayList変数に記録しています。ArrayList変数を、押されていれば true、離されたら false にする事で、両方のボタンの状態を記録して、ボタン状態を判定しています。
本ページで利用しているアイコン画像は、下記サイト様より拝借しております。各画像の著作権は、それぞれのサイト様および作者にあります。