当ブログは移転しました。

Processing mousePressedとkeyPressed

はじめに

以前にマウスの使い方と称してmouseX,mouseYについて述べたことがあるが、マウスといえばクリックである。

対話性のある(インタラクティブな)プログラムをつくろうとした場合、マウスがクリックされたりキーボードが押されたりといった判定が欲しくなることがあるだろう。

今回は、Processingにおけるマウスのクリック、キーボード入力の判定に焦点をあててみたい。

 

mousePressedについて

後ろの単語の頭文字が大文字になっていることから予想がつく人もいると思うが、mousePressedとはProcessingに用意されているメソッドと呼ばれるもので、マウスのクリックを判定することができる。

ここでは、メソッドが何かよりもmousePressedの具体的な使い方について解説しよう。

使用法はsetup,drawと同じで、

void mousePressed(){

「マウスが押された時の処理」

}

である。

それでは、さっそくmousePressedを使ったプログラムを書いてみよう。


int r;
void setup() {
  size(400, 400);
  r = 1;
}

void draw() {
  background(255);
  fill(255, 0, 0);
  ellipse(200, 200, r*5, r*5);
}

void mousePressed() {
  r = r+1;
}

例によって、上記をコピペまたは記述して実行してみて欲しい。ウィンドウの真ん中に小さい円が表示されていれば成功である。では、ウィンドウのなかでクリックをしてみよう。円が大きくなるはずである。

楽しい。

 これを応用することで、プログラミングの幅が大きく広がることは間違いないだろう。

 

keyPressedについて

いうまでもなく、こちらもProseccingに用意されているメソッドのひとつで、キーボード入力の判定をすることができる。

使用法もまた、

void keyPressed() {
  「キーボード入力がされた時の処理」
}

と扱いやすい。

しかし、これだけでは全てのキーについて判定がされてしまう。

RPGゲームを作りたかったらカーソルキーで進行方向を分ける、というようにキーを判別したいことがあるだろう。その方法についても解説したい。

アルファベットや数字の場合、

void keyPressed() {
  if(key ==  '「判定するキー」' ){
「そのキーが押された時の処理」  
  }
}

である。

この時、判定するキーを ’ ’ で囲むことを忘れないように注意しよう。

 

ENTERキーやカーソルキーを判定したい場合、

void keyPressed() {
  if(keyCode ==  「判定するキー」 ){
「そのキーが押された時の処理」  
  }
}

である。

この時、判定するキーは、全て大文字で入力する( ' 'で囲む必要はない )。具体例をしめそう。

ENTER

SPACE

UP

DOWN

RIGHT

LEFT

このあたりがよく使われるのではないだろうか。ちなみに、下4つはカーソルキーである。

それでは、さっそくkeyPressedをつかったプログラムを書いてみよう。


int x;
int y;

void setup() {
  size(400, 400);
  x = 20;
  y = 20;
}

void draw() {
  background(255);
  fill(255, 0, 0);
  ellipse(x*10, y*10, 50, 50);
}

void keyPressed() {
  if (keyCode == UP) {
    y--;
  }
  if (keyCode == DOWN) {
    y++;
  }
  if (keyCode == RIGHT) {
    x++;
  }
  if (keyCode == LEFT) {
    x--;
  }
}

多少長めのプログラムになった。カーソルキーによって中心の円を移動させることができれば成功である。

簡単に解説すると、変数xとyを用意し、カーソルキーの判定でそれらを増減させている(x++;のような書き方は覚えているだろうか?)。

まるでRPGの主人公を操作している気分を味わえる。

 

終わりに

マウスのクリックやキーボード入力を判定することで、現実世界からの情報を取得することができ、このことはプログラミング感、というよりはインタラクション性をより感じさせてくれるだろう。