マウスボタンが押された事を判定するには

◆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:

実行結果ウィンドウ上でマウスボタンを押下すると、押下している間だけ画面中央に淡赤の丸が描かれます。

上記サンプルでは draw()関数内で mousePressed システム変数が true か否かを調べることで、マウスボタンが押されているかどうかを判定しています。

<出力サンプル>
mousePressedサンプル1

 

●マウスボタンが押された事を検知する例2:

実行結果ウィンドウ上でマウスボタンを押下すると、押下した瞬間だけ画面中央に淡赤の丸が描かれます。

上記サンプルでは  mousePressed()関数を利用して、マウスボタンが押された瞬間に処理を実行しています。

<出力サンプル>
mousePressedサンプル1

 

●マウスボタンが押された事を検知する例3:

実行結果ウィンドウ上でマウスボタンを押下すると、クリックした瞬間だけ画面中央に淡赤の丸が描かれます。

例2との違いは、mouseClicked()関数を利用しているため、マウスボタンを押して離した瞬間に処理をする点です。マウスボタンを押しっぱなしにし、マウスを動かさないように注意しながら、マウスボタンを離すと、例2との違いがよくわかると思います。

<出力サンプル>
mousePressedサンプル1

 

●押された際に渡されるMouseEvent変数を利用する例:

上記サンプルでは、スケッチフォルダ(ソース格納場所)のdataフォルダ配下に、IPAexGothic-48.vlw というIPAフォントファイルがある事が前提です。

実行結果ウィンドウ上でマウスボタンを押下すると、クリックしたボタンの種類を表示します。ちなみに「中央」は、マウスホイールボタンが押された場合です。

Macなど1ボタンのマウスだと、何が返ってくるのかも・・・わかりません。試してみた方は、ぜひ教えて下さい(笑)。

<出力サンプル>
mousePressedサンプル2

 

 


PROCESSING逆引きリファレンス一覧 へ戻る

本ページで利用しているアイコン画像は、下記サイト様より拝借しております。各画像の著作権は、それぞれのサイト様および作者にあります。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)