コンテンツにスキップ

キーボードの同時押し

※キーの同時押しをして、移動しながら弾を打ち続けることができます。この機能は「キーでスムーズに図形を動かす」でも実現していますが、このページではそれとは違ったテクニックで実現しています。さまざまなテクニックを学んでみましょう。

Processingで使用できるキー情報について

processingでは押されているキーの情報は、「Key」と「KeyCode」しかなく、いずれも複数の情報を持つことができません。そのため、少し工夫する必要があります。

同時押しを実現するには

探してみると、JAVAの機能を使う例が多かったのですが、それを使用しない例もあったのでそれを参考に作ってみました。 (参考:Processingでキーの同時押しを簡単に実現する

以下が同時押しのサンプルプログラムです。

sample.pde
/*
*二つの円を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を使う場合は以下のプログラムで実現できます。

sample2.pde
/*
*円を十字キーで移動し、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;
}