◆PROCESSING 逆引きリファレンス
カテゴリー:キーボード・マウス処理
マウスホイールを判定するには
【解説】
PROCESSINGでは様々なマウス操作をとらえて、処理を行うことが出来ます。
その1つにマウスホイールボタンの回転を知る方法があります。
上の図は一般的なマウスのホイールボタンです。あ、説明するまでも無いですよね(汗)。ホイールボタンの回転は、mouseWheel() イベント関数で処理可能です。
【構文】
void mouseWheel( );
void mouseWheel( MouseEvent event );
【パラメータ】
MouseEvent : event : マウスイベントオブジェクト
event は MouseEvent オブジェクトのインスタンス変数です。event には、操作されたボタンの種類や、その時のマウスカーソルの座標などが保持されています。
詳しくは「マウスボタンが押された事を判定するには」記事か、github上のprocessing.github.ioを参照してください。
【戻り値】
void (なし)
【注意】
mouseWheel( event ) 関数に渡される MouseEvent 型のインスタンス変数を利用する事で、ホイールされた方向(回転方向)を知る事が可能です。
回転方向はどうでも良くて、ホイールボタンが回された事だけが知りたい場合は、MouseEvent型のインスタンス変数を引数に伴わない mouseWheel() 関数を利用しても良いでしょう。
マウスホイールの回転方向を知るには、MouseEventオブジェクトが持つ getAmount() メソッドを利用します。
float f = MouseEvent.getAmount();
ホイールボタンを手前から奥に向かって(操作者から見た場合、操作者とは反対方向に)回すと、 f は負の値(-1)を返します。
(画像URL:FUJI フィルム 様)
その逆で奥から手前に向かって(操作者側に)回すと、f は正の値(1)を返します。
(画像URL:FUJI フィルム 様)
私の環境では試せませんでしたが、公式リファレンスに以下の注意があります。「 “natural” スクローリングを有効にした OS X では、その値は反対となる 」。
これは getAmount() が戻す値が、「OS XとWindowsでは、逆になる事があるよ」という意味だと思われます。MACを使われている方は注意してください。
ちなみにマウスの中には、ホイールボタンが押せるタイプの商品もあります。ホイールボタンが押下された事は mouseClicke( ) イベント関数で処理可能です。サンプルプログラムを掲載しましたので参考としてください。
私の手持ちのマウスではホイールボタンは直下に押し込む事しかできません。ホイールボタンを左右に傾ける事が可能なマウスもあるかと思いますが・・・その場合どうなるのかは、良くわかりません(汗)。
mouseWheel( ) 関数とmouseWheel( event ) 関数を2つとも定義すると、mouseWheel( event ) 関数が優先して呼び出されます。この時、イベントを引数に取らないmouseWheel( ) 関数は呼び出されません。注意してください。
【関連記事】
- マウスのダブルクリックを判定するには
- マウスボタンが押された事を判定するには
- マウスボタンが離された事を判定するには
- マウスが動かされた事を判定するには
- マウスのどのボタンが押されたか調べるには
- マウスポインタの座標を知るには
サンプルプログラム
ホイールボタンの回転を検知する例:
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 |
float deg; //回転度数 void setup(){ size(500, 500, P3D); noFill(); deg = 0; } void draw(){ background(0); //画面中央を起点に、X軸で回転させる translate(width/2, height/2); rotateX( deg / 200.0); //立方体を描画する strokeWeight(2); stroke(255,255,255); box(250); } void mouseWheel(MouseEvent e ){ if( e.getAmount() < 0 ){ //奥に向かって回転させる deg = deg + 4; } else { //手前に向かって回転させる deg = deg - 4; } } |
(上記サンプルは Qiita 様に投稿されていたものを、改編して利用しています。)
マウスホイールを回転させると、中央に描かれた立方体がX軸方向に回転します。
ホイールボタンの押下を検知する例:
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 |
PFont pf; int iX, iY; void setup(){ size(300, 300); //表示用の文字をセット pf = loadFont("IPAexGothic-48.vlw"); textFont( pf, 24 ); iX = width/2; iY = height/2 - 24/2; background(0); } void draw(){ } void mouseClicked(MouseEvent e ){ //押されたボタンの位置を表示 background(0); switch( e.getButton() ){ case RIGHT: text( "右",iX - textWidth("右")/2, iY); break; case LEFT: text( "左",iX - textWidth("左")/2, iY); break; case CENTER: text( "中央",iX - textWidth("中央")/2, iY); break; } } |
スケッチフォルダ配下の data フォルダに、IPAexGothic-48.vlwフォントが格納されている事が前提です。
ホイールボタンをクリックすると、画面中央に ”中央” の文字が表示されます。
本ページで利用しているアイコン画像は、下記サイト様より拝借しております。各画像の著作権は、それぞれのサイト様および作者にあります。