◆PROCESSING 逆引きリファレンス
カテゴリー:キーボード・マウス処理
マウスボタンが押された事を判定するには
システム変数 mousePressed を調べるマウスボタンが押されている間 trueになるシステム変数です。ボタンが離されていると false になります。これを draw()関数の中で適度な間隔で検査すれば、マウスボタンが押されているかどうかを判別可能です。
●mousePressed() 関数で、マウスボタンが押されたイベントを捕まえる
マウスボタンを押したタイミングをタイムリーに検知したいなら、mousePressed()関数でボタンが押されたタイミングで処理を行うのが良いでしょう。
●mouseClicked() 関数で、マウスボタンが押されて離された事を捕まえる
上記の関数と似ていますが、その違いは「ボタンが、押されて離されたタイミング」で呼び出される事です。まさにカチッとクリックしたタイミングで処理を行うための関数です。
【構文】
システム変数:
boolean mousePressed ;
イベント関数:
void mousePressed(){ … }
void mousePressed(event){ … }
void mouseClicked(){ … }
void mouseClicked(event){ … }
【パラメータ】
MouseEvent : event : マウスイベントオブジェクト
eventはMouseEventオブジェクトのインスタンス変数で、押されたボタンの種類、押された際のマウスカーソルの座標、押された回数などを保持しています。以下はMouseEventが持つ代表的なメソッドです。
具体的な使い方は下記URLか下記サンプルを参照してください。
参考URL:processing.github.io
public int getButton();
押されたボタンの種類を取得します。LEFT, CENTER, RIGHT の何れかが返却されます。
public int getCount();
クリック数を取得します。ダブルクリックやトリプルクリックの検知に利用できます。詳しくは「マウスのダブルクリックを判定するには」記事を参照してください。
public int getX();
イベントが発生した際のマウスカーソルのX座標です。
public int getY();
イベントが発生した際のマウスカーソルのY座標です。
public boolean isShiftDown();
イベントが発生した際に、同時にSHIFTキーが押されていた場合 true になります。押されていない場合は false になります。高度な画像加工アプリケーションなどで、シフトキーを押しながらクリックした場合と、単純なクリックで機能を分けたい場合などに使えそうです。
public boolean isControlDown();
同様に、イベントが発生した際に、同時にCTLキーが押されていた場合 true になります。押されていない場合は false になります。
public boolean isAltDown();
同様に、イベントが発生した際に、同時にALTキーが押されていた場合 true になります。押されていない場合は false になります。
【戻り値】
イベント関数の戻り値は void
【注意】
システム変数の mousePressed は、ボタンが押されている間 trueとなりますが、draw()関数のループ間隔が長い(秒単位など)と、押された瞬間を検知する精度が落ちます。
システム変数の mousePressed は、直前に操作されたボタンの状態を保持している事に注意が必要です。例えばマウスの左ボタンを押しながら右ボタンも押しこみ、その状態から片方づつ順番にボタンを離していくと、
1:false(初期状態)
2:true(左ボタンが押された時)
3:true(右ボタンも押された時)
4:false(片方が離された時)
5:false(両方を離した時)
と、変数の内容が変化します。
けっして、1つでもボタンを押していたら true になるわけではありませんので注意してください。
mousePressed() 関数は、マウスボタンが押される度に呼び出されます。ボタンが押されっぱなしでも、最初にボタンが押された瞬間1回だけ呼びだされます。
mouseClicked() 関数は、押されたボタンが離された瞬間に呼びだされます。ボタンが押されていた時間に関わらず、マウスボタンを押して離したタイミングで1回だけ呼びだされます。
ただしマウスボタンを押しながら、マウスを動かして、マウスボタンを離すと、それはクリックとはみなされず mouseClicked() 関数は呼び出されません。文字通りクリックを検知する関数である事に注意が必要です。
手元の環境で試した限り、マウスイベントは
mousePressed ⇒mouseReleased ⇒mouseClicked の順番で発生します。
またmousePressed()関数とmousePressed(event)関数を2つとも定義すると、mousePressed(event)関数が優先して呼び出されるようです。この時、イベントを引数に取らないmousePressed()関数は呼び出されません。
mouseClicked()関数と mouseClicked(event)関数を2つとも定義した場合も、同様です。
【関連記事】
- マウスのダブルクリックを判定するには
- マウスボタンが離された事を判定するには
- マウスが動かされた事を判定するには
- マウスホイールを判定するには
- マウスのどのボタンが押されたか調べるには
- マウスポインタの座標を知るには
●マウスボタンが押された事を検知する例1:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
void setup() { size(300, 300); frameRate(60); } void draw(){ background(255); if( mousePressed == true ){ fill(color(255,100,100)); ellipse( width/2,height/2,20,20); } } |
実行結果ウィンドウ上でマウスボタンを押下すると、押下している間だけ画面中央に淡赤の丸が描かれます。
上記サンプルでは draw()関数内で mousePressed システム変数が true か否かを調べることで、マウスボタンが押されているかどうかを判定しています。
●マウスボタンが押された事を検知する例2:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
void setup() { size(300, 300); frameRate(60); } void draw(){ background(255); } void mousePressed(){ fill(color(255,100,100)); ellipse( width/2,height/2,20,20); } |
実行結果ウィンドウ上でマウスボタンを押下すると、押下した瞬間だけ画面中央に淡赤の丸が描かれます。
上記サンプルでは mousePressed()関数を利用して、マウスボタンが押された瞬間に処理を実行しています。
●マウスボタンが押された事を検知する例3:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
void setup() { size(300, 300); frameRate(60); } void draw(){ background(255); } void mouseClicked(){ fill(color(255,100,100)); ellipse( width/2,height/2,20,20); } |
実行結果ウィンドウ上でマウスボタンを押下すると、クリックした瞬間だけ画面中央に淡赤の丸が描かれます。
例2との違いは、mouseClicked()関数を利用しているため、マウスボタンを押して離した瞬間に処理をする点です。マウスボタンを押しっぱなしにし、マウスを動かさないように注意しながら、マウスボタンを離すと、例2との違いがよくわかると思います。
●押された際に渡される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 |
PFont font; public void setup() { size(300, 300); frameRate(60); font = loadFont("IPAexGothic-48.vlw"); textFont(font,32); textAlign(LEFT, TOP); } public void draw() { } public void mousePressed ( MouseEvent e ){ background(255); fill(0); switch( e.getButton() ){ case LEFT: text( "左が押された",0,16); break; case CENTER: text( "中央が押された",0,16); break; case RIGHT: text( "右が押された",0,16); break; default: text ("?",0,16); break; } } |
上記サンプルでは、スケッチフォルダ(ソース格納場所)のdataフォルダ配下に、IPAexGothic-48.vlw というIPAフォントファイルがある事が前提です。
実行結果ウィンドウ上でマウスボタンを押下すると、クリックしたボタンの種類を表示します。ちなみに「中央」は、マウスホイールボタンが押された場合です。
Macなど1ボタンのマウスだと、何が返ってくるのかも・・・わかりません。試してみた方は、ぜひ教えて下さい(笑)。
本ページで利用しているアイコン画像は、下記サイト様より拝借しております。各画像の著作権は、それぞれのサイト様および作者にあります。