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