◆PROCESSING 逆引きリファレンス
 カテゴリー:キーボード・マウス処理
マウスポインタの座標を知るには
【解説】
PROCESSINGではマウスが押された場合や動かされた場合、マウスポインタが画面上のどこにあるのかを知る事が可能です。
mouseClicked():マウスボタンクリック
mouseDragged():マウスドラッグ
mouseMoved():マウス移動
mousePressed():マウスボタン押下
mouseReleased():マウスボタンを離す
mouseWheel():ホイールボタンを回す
の各イベント関数に渡される MouseEvent オブジェクトのインスタンス変数を利用する事で、そのイベントが発生した時のマウスポインタ座標が取得できます。
またPROCESSINGが提供してくれる mouseX、mouseY、pmouseX、pmouseY 変数でも知ることができます。
【構文】
void  mouseClicked(  MouseEvent  event  );
void  mouseDragged(  MouseEvent  event  );
void  mouseMoved(  MouseEvent  event  );
void  mousePressed(  MouseEvent  event  );
void  mouseReleased(  MouseEvent  event  );
void  mouseWheel(  MouseEvent  event  );
【パラメータ】
MouseEvent : event : マウスイベントオブジェクト
event は MouseEvent オブジェクトのインスタンス変数です。event には、操作されたボタンの種類や、その時のマウスカーソルの座標などが保持されています。
詳しくは「マウスボタンが押された事を判定するには」記事か、github上のprocessing.github.ioを参照してください。
【戻り値】
void (なし)
【注意】
各イベント関数に渡される MouseEvent オブジェクトのインスタンス変数を用いると、そのイベントが発生した時のポインタ座標が取得できます。なにか操作された時のタイムリーな座標を知りたい場合は便利です。
座標の取得には MouseEvent オブジェクトが持つ getX()、getY() メソッドを利用します。
- 横座標の取得 int x = event.getX();
 - 縦座標の取得 int y = event.getY();
 
戻り値の座標(x と y)は int型になります。
PROCESSINGが提供してくれる mouseX、mouseY、pmouseX、pmouseY 変数は draw() 関数などで利用します。
draw() 関数で用いた場合、mouseX、mouseY は、そのフレームループ時点でのマウスポインタ座標を、pmouseX、pmouseYは 1 つ前のフレームループ時点でのマウスポインタ座標を保持しています。
mouseX、mouseY、pmouseX、pmouseY 変数は、いずれも初期値は0です。
以下の様な感じで変化します。
●最初
mouseX = 0;  mouseY = 0;  pmouseX = 0;  pmouseY = 0;
●次の draw ループまでの間に、マウスポインタが(10, 20)  に移動
mouseX = 10;  mouseY = 20;  pmouseX = 0;  pmouseY = 0;
●次の draw ループまでの間に、マウスポインタが(30, 40)  に移動
mouseX = 30;  mouseY = 40;  pmouseX = 10;  pmouseY = 20;
注意点はmouseX、mouseY、pmouseX、pmouseY が draw()関数のフレームループ毎と、イベント関数が呼び出された時点で更新される事です。
また戻される座標は、すべて実行結果ウィンドウの左上隅座標を(0, 0)とした相対座標です。ディスプレイ画面上での絶対座標ではありません。
なお、実行結果ウィンドウの内枠(描画領域)からマウスポインタが外れた(外に出た)場合、次に実行結果ウィンドウの内枠(描画領域)にマウスポインタが移動してくるまで、これらの変数は更新されません。
マウスポインタのスクリーン座標を知りたい場合は、「マウスポインタのスクリーン座標を知るには」記事を参照して下さい。
【関連記事】
- マウスのダブルクリックを判定するには
 - マウスボタンが押された事を判定するには
 - マウスボタンが離された事を判定するには
 - マウスが動かされた事を判定するには
 - マウスのどのボタンが押されたか調べるには
 - マウスホイールを判定するには
 - マウスポインタのスクリーン座標を知るには
 
サンプルプログラム
ボタンが押された際のマウスカーソル位置を取得する例:
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13  | 
						void setup(){   size(300, 300);   background(0);   //点の色と大きさを指定   stroke(100,100,255);   strokeWeight(8); } void draw(){ } void mouseClicked(MouseEvent e ){   //クリックされた位置に点を打つ   point( e.getX(), e.getY() ); }  | 
					
マウスボタンが押された際に、該当位置に青い点を打ちます。
フレーム毎にマウスカーソル位置を取得する例:
| 
					 1 2 3 4 5 6 7 8 9 10 11  | 
						void setup(){   size(300, 300);   background(0);   stroke(100,100,255);   strokeWeight(8);   frameRate(30); } void draw(){   point( mouseX, mouseY ); }  | 
					
マウスを実行結果ウィンドウの上で動かすと、マウスポインタの位置に連続して青い点が描かれます。
応用例:
| 
					 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 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63  | 
						//点の座標を管理するクラス class clsMCLocation{   private int  x1;  //1つ目のX   private int  y1;  //1つ目のY   private int  x2;  //2つ目のX   private int  y2;  //2つ目のY   //座標を前詰めする処理   private void shift(){     this.x1 = this.x2;     this.y1 = this.y2;   }      //座標を覚える処理   public void setLocation(int px, int py ){     //常に前詰めして、2つ目に覚える     shift();     this.x2 = px;     this.y2 = py;   }   //座標を取り出す処理   public int[] getLocation(){     int  locate[] = new int[4];     locate[0] = this.x1;     locate[1] = this.y1;     locate[2] = this.x2;     locate[3] = this.y2;     return( locate );   } } clsMCLocation  MZahyou; int            iClickCount; //クリック数管理 void setup(){   size(300,300);   MZahyou = new clsMCLocation();   iClickCount = 0;   //線(点)の幅と色を指定   strokeWeight(8);    stroke(100,100,255);   background(0); } void draw(){   //2回め以降のクリック時に座標を取り出して   //線をつなぐ   if( iClickCount == 2 ){     int[] p;     p = MZahyou.getLocation();     line( p[0], p[1], p[2], p[3] );     //2回目以降線を連続で繋ぎたいので     //クリック数は常に1にする     iClickCount = 1;   } } void mouseClicked(MouseEvent e){   //クリックされた座標を記憶する   MZahyou.setLocation(e.getX(),e.getY());   //点を打つ   point( e.getX(),e.getY() );   iClickCount++; }  | 
					
マウスでクリックした箇所から、連続して線を描きます。
最初にマウスがクリックされた時は、clsMCLocationのローカル変数 x2 と y2 にクリックされた座標を記録します。

次にマウスがクリックされると、最初の座標を x1 と y1 に移し替えて(shiftメソッド)、今クリックされた座標をx2 と y2 に記録します。その後、( x1, y1 ) – ( x2, y2 ) にかけて線を引きます。

3回めにクリックされた場合も2回目同様です。結果として、どんどん線が伸びていきます。

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



