キーボードの同時押し
※キーの同時押しをして、移動しながら弾を打ち続けることができます。この機能は「キーでスムーズに図形を動かす」でも実現していますが、このページではそれとは違ったテクニックで実現しています。さまざまなテクニックを学んでみましょう。
Processingで使用できるキー情報について
processingでは押されているキーの情報は、「Key」と「KeyCode」しかなく、いずれも複数の情報を持つことができません。そのため、少し工夫する必要があります。
同時押しを実現するには
探してみると、JAVAの機能を使う例が多かったのですが、それを使用しない例もあったのでそれを参考に作ってみました。 (参考:Processingでキーの同時押しを簡単に実現する)
以下が同時押しのサンプルプログラムです。
/* *二つの円をaとsキーで移動できる。(同時押しも可) */
boolean[] keys=new boolean[256]; //キー情報の格納用配列float x1,x2;//二つの円のx座標
void setup() { size(300,300); x1=x2=40;}
void draw() { //背景 background(128);
//キー入力の確認 //文字(char型)は整数値に暗黙的に変換できる if(keys['a']) //aが押されているとき x1++; if(keys['s']) //sが押されているとき x2++;
//円の表示 ellipse(x1,70,20,20); ellipse(x2,230,20,20);}
void keyPressed(){ if(key!=CODED) //CODEDは整数値が65535なので配列範囲外になってしまいます keys[key]=true; //押されたキーを真にする}void keyReleased(){ if(key!=CODED) //CODEDは整数値が65535なので配列範囲外になってしまいます keys[key]=false; //離れたキーを偽にする}
keyCodeを使う場合は以下のプログラムで実現できます。
/* *円を十字キーで移動し、zキーでショットが打てる。(同時押しもできる) */
boolean[] keys=new boolean[256]; //keyのキー情報の格納用配列boolean[] keyCodes=new boolean[256]; //keyCodeのキー情報の格納用配列float x,y;//円の座標float sx,sy;//ショットの座標
void setup() { size(300,300); x=y=150; sx=sy=-1;}
void draw() { //背景 background(128);
//キー入力の確認 if(keys['z']&&sy<0) //zが押されているとき { sx=x; sy=y; } if(keyCodes[UP]) //上矢印が押されているとき y--; if(keyCodes[DOWN]) //下矢印が押されているとき y++; if(keyCodes[RIGHT]) //右矢印が押されているとき x++; if(keyCodes[LEFT]) //左矢印が押されているとき x--;
//ショットの移動 sy-=5;
//円の表示 ellipse(x,y,20,20); //ショットの表示 ellipse(sx,sy,8,15);}
void keyPressed(){ if(key!=CODED) keys[key]=true; else keyCodes[keyCode]=true;
}void keyReleased(){ if(key!=CODED) keys[key]=false; else keyCodes[keyCode]=false;}