◆PROCESSING 逆引きリファレンス
 カテゴリー:キーボード・マウス処理
キーが押された事を判定するには
【解説】
PROCESSINGではキーボードが押された事を検知して、何か処理を行う事が可能です。
キーボードが押された事を検知するには2つの方法があります。
●システム定数 keyPressed  を調べる
キーボードが押されている間 trueになるシステム変数です。キーが離されていると false になります。これを draw()関数の中で適度な間隔で検査すれば、キーが押されているかどうかを判別可能です。
●keyPressed()関数でキー押下イベントを捕まえる
押された瞬間をタイムリーにつかまえたいなら、keyPressed()関数でキーが押されたタイミングで処理を行うのが良いでしょう。keyPressed() 関数はキーが押されるたびに呼び出されます。
【構文】
システム変数:
boolean  keyPressed ;
イベント関数:
void  keyPressed(){  …  }
【パラメータ】
なし
【戻り値】
void
【注意】
システム変数のkeyPressedは、キーが押されている間しか true になりません。draw()関数のループ間隔が長い(秒単位など)と、押された瞬間を検知する精度が落ちます。
keyPressed()関数は、キーが押さた際に呼び出されますが、キーが押されっぱなしの場合、何度も繰り返し呼びだされてしまいます。keyPressed()関数がどの程度の精度でキーの押下をキャッチできるかは、お使いのOSやPCの性能に依存します。
私のPCの場合、あるキーを押しっぱなしにした場合、1秒間に16~17回の精度でkeyPressed()関数が呼び出されました。
【関連記事】
押された(離された)キーが何か調べるには
キーが離された事を判定するには
第3章:改定版-タイトル画面を作成しよう(その7)
●キーが押されたら処理する例1:
| 
					 1 2 3 4 5 6 7 8 9 10 11 12  | 
						void setup(){   size( 300,300 );   frameRate(60); } void draw(){   background(255);   if( keyPressed == true ){     fill(100,100,255);     ellipse( width/2, height/2, 32, 32 );   } }  | 
					
上記サンプルを実行すると、キーが押されれいる間だけ、画面中央に青い丸が描かれます。
上記サンプルでは、描画処理関数(draw)の中で、keyPressedシステム変数をチェックし、キーがされているかどうかを判定しています。
●キーが押されたら処理する例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 keyPressed(){     fill(100,100,255);     ellipse( width/2, height/2, 32, 32 ); }  | 
					
上記サンプルを実行すると、キーが押されるたびに、画面中央に青い丸が描かれます。
上記サンプルでは、keyPressed()イベント関数を利用して、キーが押された瞬間を捕まえて処理を行っています。
●応用例:
| 
					 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  | 
						static int  MAX_ALPHER = 255; int      speed = 30;      //拡散スピード float    wa = MAX_ALPHER; //レーダー波透明度 float    wh =  0;         //レーダー波大きさ boolean  wf = false;      //レーダー波描画FLG] color    wc = color(160,160,255); //レーダー波色 PImage   img;            //宇宙船画像 void setup(){   size( 300,300);   wf = false;   frameRate(15);   img = loadImage( "ship.png" ); } void draw(){   background(255,255,255);   // 宇宙船描画   image( img, (width - img.width)/2, (height - img.height)/2);   //レーダー照射時   if( wf == true ){       //レーダー波を描画     smooth();     noStroke();     fill(wc, wa);     ellipse( width/2, height/2, wh, wh);     //レーダー波の透明度を計算     wa = wa - speed;     if( wa < 0 ){        wa = MAX_ALPHER;       wf = false;      }     //レーダー波大きさ計算     wh = wa - MAX_ALPHER;   } } void keyPressed( ) {   //レーダー波照射   wf = true; }  | 
					
上記を実行すると、キーボードが押されるたびに画面中央に描かれた宇宙船から、レーダーのような波模様が周囲に描かれます。
上記サンプルは、スケッチフォルダ(ソースプログラム格納場所)のdataフォルダ配下に ship.pngという名前の画像が格納されている事が前提です。
<出力サンプル:宇宙船画像URL illust-AC 様:pando333さん>

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