• 締切済み

Processingでのキーの同時入力

Processingでゲームを作ろうとしているのですがキーボードの同時入力がうまくいきません。 例えば下記のようなキー入力に応じて黒い四角が動くプログラムを実行しました。方向キーを一つだけ押したときはサクサク動いてくれるのですが、→と↓を同時に押しても斜めに進んでくれません。また、→と←を押した場合もどちらか片方の方に動いてしまいます。 このような問題を解決したいので、Processingでキーボードの同時入力を判定するにはどのようにすればいいのか教えてください。 float x, y; void setup(){ size(400, 400); noStroke(); smooth(); } void draw() { background(255,255,255); fill(0,0,0); rect(x,y,20, 20); if (keyPressed && key == CODED){ if (keyCode == LEFT){ x -= 2; } if (keyCode == RIGHT){ x += 2; } if (keyCode == UP){ y -= 2; } if (keyCode == DOWN){ y += 2; } } }

みんなの回答

  • wek00
  • ベストアンサー率62% (90/145)
回答No.1

Processingでキーボードの同時入力 で検索するとそれらしいページがいくつか出てきますね。 Processingでゲームを作ろうとしているのですがキーの同時入力ができな... - Yahoo!知恵袋 というページも。

関連するQ&A

  • Processingでの10進数表示について

    初めて質問させていただきます。プログラミングについては、全くの初心者です。 Processingで10000からのカウントダウンタイマーを作りたいと思い、様々なサイトを参考にさせていただき、次のようなプログラムを作りましたが、16進数での表示となっており、これを10進数表示に変える方法がどうしても分かりません…。 /** * Countdown(int) * */ import processing.video.*; MovieMaker mm; PFont font; String t; int cont; void setup(){ size(1200, 480); mm = new MovieMaker(this, 1200, 480, "Countdown.mov", 1, MovieMaker.VIDEO, MovieMaker.LOSSLESS); frameRate(100); background(1); smooth(); textSize(400); cont = 10000; } void draw(){ background(0); t = hex(cont, 5); if(cont < 16){ fill(255, 0, 0); } text(t,50,400); if(cont > 0){ cont -= 1; } mm.addFrame(); } void keyPressed() { if (key == ' ') { mm.finish(); println("save movie."); exit(); } } 色々と調べて、どうもhexの部分が良くないのではと思っているのですが、これをどのように変えても上手く行きません。 無知なもので、大変お恥ずかしい質問かと思いますが、ご教示のほどよろしくお願いいたします。

  • processingのマウス操作について

    現在processingを使って、画像のような図を作り、マウスでクリックしたところだけに色がついて、もう一度クリックすると色が消えるというプログラミングを作りたいと思っているのですが、なかなかうまくできません。 以下現在打ち込んでいるものです // Click within the image to change // the value of the rectangle after // after the mouse has been clicked int value = 255; int rect_size = 50; int num = 300 / rect_size; int x; void setup(){ size(300,300); } void draw(){ fill(value); for (int i = #ffffff;i < num;i++){ for (int j = 0;j < num;j++){ if (j%2 == 0){ x = i*rect_size*2; } else { x = i*rect_size*2+rect_size; } rect(x,j*rect_size,rect_size,rect_size); } } } void mouseClicked() { if (value == 255) { value = #aaaaaa; } else { value = 255; } } 使用言語はすべて英語です。 おそらく、drawのところでパターンとしてチェック模様を書いてしまっているのと、1マスだけに限定するという風な命令を書けていないからだと思うのですが、先生に訊いてもよくわかりません。 ご存じの方はご指導ご鞭撻のほどどうぞよろしくお願いします。

  • プログラミングProcessing ピンポンゲーム

    Processingでピンポンゲームを作っています。作成したプログラムは void setup(){ size(400,300); } float x=10; float y=10; float dx=1; float dy=2; int count=0; float r_w=50.0; float a_w=15.0; float a_h=15.0; boolean checkHit(float x,float y){ if(y+a_h<250)return false; if(x+a_w>=mouseX&&x<=mouseX+r_w){ return true; }else{ return false; } } void draw(){ x=x+dx;y=y+dy; if(x+a_w>=400){ dx=-1; }else if(x<0){ dx=1; } if(y+a_w>300){ x=0; y=0; dx=1; dy=2; count=0; }else if(y<0){ dy=2; } background(0,0,128); rect(x,y,a_w,a_w); rect(mouseX,250,r_w,3); text(count,10,300); if(checkHit(x,y)){ dy=-2; count=count+1; } } このプログラムだとどうしてもラケットの下にボールが潜り込んだ時に ボールが跳ね返されてしまうバグが発生してしまいます。 問題はboolean checkHitの部分にあると思うのですが、 どのように調節すればよいか分かりません。 わかる方教えてください<(__)>

  • processingのカーソルと画像の距離

    processingでクリスマスカードを作るのですが、どうしてもカーソルと雪だるまの距離があいてしまいます。この距離をあけないようにするにはどうしたらいいでしょうか?わかる方がいらっしゃいましたらどうぞよろしくお願いします。 void setup() { size(600,600); smooth(); noStroke(); } int flag = 0; void draw() { background(10,50,100); fill(0); rect(0,450,600,280); int x=50,y=30; fill(#006e54); triangle(300,50,400,200,200,200); triangle(300,50+x,420,280,180,280); triangle(300,50+2*x,420+y,280+2*x,180-y,280+2*x); fill(190,103,31); rect(275,280+2*x,50,150); textSize(45); fill(255,0,0); text("Merry X'mas!",170,580); fill(random(255),random(255),random(255)); translate(249,5); beginShape(); vertex(50 , 50 - 20); vertex(50 - 12 , 50 + 15); vertex(50 + 18 , 50 - 8); vertex(50 - 18 , 50 - 8); vertex(50 + 12 , 50 + 15); endShape(CLOSE); fill(random(255),random(255),random(255)); ellipse(20,90,30,30); fill(random(255),random(255),random(255)); ellipse(100,130,30,30); fill(random(255),random(255),random(255)); ellipse(10,170,30,30); fill(random(255),random(255),random(255)); ellipse(55,220,30,30); fill(random(255),random(255),random(255)); ellipse(130,250,30,30); fill(random(255),random(255),random(255)); ellipse(90,350,30,30); fill(random(255),random(255),random(255)); ellipse(30,300,30,30); fill(random(255),random(255),random(255)); ellipse(10,360,30,30); fill(random(255),random(255),random(255)); ellipse(160,320,30,30); fill(random(255),random(255),random(255)); ellipse(-40,330,30,30); if(mousePressed) { flag=1; } else { flag=0; } if(flag==1) { snowman(); } else { textSize(20); fill(255); text("Please press mouse to create a snowman!",-150,20); } } void snowman() { int speed=2; int x=mouseX; int y=mouseY; x+=random(-speed,speed);//let snowman move randomly // x=constrain(x,0,500); y+=random(-speed,speed); y=constrain(y,0,600); fill(255); //make a little snowman ellipse(x,y-50,50,50); ellipse(x,y,100,100); fill(0); ellipse(x-10,y-55,10,10); ellipse(x+10,y-55,10,10); fill(#ff0000); triangle(x-10,y-50,x+10,y-50,x,y-30); }

  • processingのプログラムの書き方について。

    課題で、どこからマウスをプレスしても20個もの四角を(0,0)まで数珠つなぎみたいにするプログラムをかいているんですが全然わかりません。 そのため大きさなどは瞬時に計算をするからmouse x, mouse yをつかいます だからrect(mouseX,mouseY,mouseX,mouseY)になると思うんですが。。 とにかく全部わかりません。教えてください。 自分が書いたのはこんなのですが、全然違います。 forループ、mouseX, mouseYを使うのはわかります int s = 600; int n = 20; int i = mouseX; void setup() { size(s,s); background(255); noStroke(); rectMode(CENTER); } void draw() { if(mousePressed) { for(int i=0; i<s; i++); { fill(255,0,0); rect(mouseX,mouseY,mouseX,mouseY); } } }

  • プログラミング初心者です

    processingプログラミング作成をしています。 mouseファンクション(mouseClickedとか)やkeyファンクション(keyPressed)などのファンクションをつかったときに、クリックやkeyをたたいたら次々変わっていくみたいなプログラムを作成したいんですが、教えてください。 いまは画面を4等分にし、mouseClickedををつかったらランダムに選ばれたスペースを赤く塗り、もう一回mouseをクリックしたら、その赤く塗られたのは消えて、次のまたランダムに選ばれたスペースへと移動する。。それを何回もやるというプログラミングにしたいです。 sizeは600,600でそれぞれのrectは rect(0,0,300,300) rect(300,0,600,300) rect(0,600,300,300) rect(600,600,300,300) で区切ってます。ずっと時間かけてやってますが、これをどうやってrandomファンクションにし、それをランダムに選ばれたスペースをマウスクリックしたら赤く塗られるようにするかがもっていくかがどうしてもわかりません。 あと、もう一回クリックしたら前にクリックした場所が消えるというのもわかりません。 これが今までに書いたプログラムです。 いまはif elseをつかっています。 よろしくお願いします。 void setup() { size(600,600); strokeWeight(2); background(255); line(0,width/2,600,width/2); line(height/2,0,height/2,600); } void draw() { fill(255,0,0); } void mouseClicked() { if( mouseX <= width/2) { fill(255,0,0); rect(0,0,width/2,height/2); } else { rect(width/2,0,300,300); fill(255,0,0); } if (mouseX > height/2) { rect(0,width/2,height/2,height); fill(255,0,0); } else { rect(width/2,height/2,width,height); fill(255,0,0); } }

  • processingでパックマンを反転させたい。

    【processingでパックマンを反転させたい。】 現在、パックマンが壁にぶつかると跳ね返りはするのですが、そのまま右向きで口をパクパクとしてしまいます。 なんとか左向きにしたいとarcを色々いじったりして試行錯誤しているのですが、どのようにすればわかりません。 壁にぶつかったとき左向きにするためにはどのようにプログラミングすればよいのでしょうか。 int i=25,j=0; int mflag =1; int rflag =1; void setup(){ size(400,50); smooth(); noStroke(); frameRate(20); } void draw(){ background(255); fill(0,0,0); arc(i,25,50,50,radians(j),radians(360-j)); i+= rflag * 5; j+= mflag * 8; if(j>40||j<0){ mflag = -mflag; } if(i==25||i==375){ rflag = -rflag; } }

  • 特定のキーを入力すると隣のキーも同時押しされてしまいます

    ノートPCを使っているんですが、キーボードの調子が悪くて困ってます。 というのも、特定のキーを入力しようとすると隣のキーも同時押しされてしまいます。 具体的には ・[a]のキーを押すとasまたはsaと入力される  [s]のキーを押すとasまたはsaと入力される というように、他にも ・[1](2)のキーを押すと21または12と入力される ・[q](w)のキーを押すとqwまたはwqと入力される ・[z](x)のキーを押すとxzまたはzxと入力される ・[半角/全角]のキーを押すとワードでいうイルカが出てくるキーも  同時押しされる といった感じで、左側の一帯(2列あたり)が調子が悪いようです。 この状態で文章を打っているととても時間がかかり、ストレスもたまってしまいます。 特に水等をこぼしたわけでもなく、急にこのような状態になってしまいました。しかし、時々上記のような症状がなくなり、しばらく調子良く使えるときがありますが、またしばらく経つと調子が悪い状態に戻ってしまいます。 ほこりが原因かとキーボードを掃除機で吸ってみたりもしましたがダメでした。 他のキーボード問題のトピを見ていたところ、外付けのキーボードを使うという方法もあるようですが、このノートのキーボードも気に入ってるので、このキーボードをどうにかするアドバイスをいただけたらと思っています。 やはり回路がショートしてるか何かで、修理に出すしかないでしょうか?

  • キーボードは、同時に押されるキーが何個までなら許容できる?

    キーボード左上の「1」と「Shift」の2つのキーを同時に押すことで「!」を入力できますが、 3つのキーを同時に押すことで入力する文字というのはありますか? また、キーボード(というかパソコン本体?)は、同時に押されるキーがいくつまでなら受け入れることができるのでしょうか? 4つは無理でしょうか? 「ぎゃ」「ぎゅ」「ぎょ」等が、 子音キー + 濁音キー + 拗音キー + 母音キー の同時押しで、 一瞬で入力できればいいなと思うのです。

  • キーボードで画像を動かす方法

    javaScriptで、 if (event.keyCode == 38) UP(); if (event.keyCode == 39) RIGHT(); if (event.keyCode == 37) LEFT(); if (event.keyCode == 40) DOWN(); のような処理で、上下左右の方向に画像などを移動させています。 しかし、上キーと右キーを同時に押しても 右上には移動しません。 率直にJavaScriptでキーボード入力を行って 右上、右下、左上、左下のように 2つのキーを同時に押したことを判定する方法は ありますでしょうか? ためしに&&を用いて 上キーと右キーが押されたとき用にUP_RIGHT() を作ってコールしたのですが思ったように動かないようでした。 どうかご教授ください。

専門家に質問してみよう