• ベストアンサー

どのキーが押されたか調べる

processingというソフトを見つけて色々使ってみているのですが、これはキーの複数の同時に押した場合の判定が出来ないような使用になっています。Javaで出来ているのでライブラリを作ればいいのかなと思いましたがメインプログラム以外でキーを取得する方法が分かりません。 ご教授お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • _ranco_
  • ベストアンサー率58% (126/214)
回答No.3

なーるほど。同時打鍵というより、前のキーがまだリリースされていないことを検出しているんですね。でも人間の目には 連続している x++; y++; と、 同一のkeyPressed()の中で x++; そして次の瞬間 y++; の違いは、動きがワンピクセルなら識別できない(==まったく同じと見える)ので、無意味な迷案です。 したがって、processingのkey変数は十分に利用可能です。 というか、processingのようなヘンなものを、最初から使わないのがベストでしょう。

wynd
質問者

お礼

分かりました。 javaについてもう少し詳しく勉強して、そちらを使うことにします。

その他の回答 (2)

  • _ranco_
  • ベストアンサー率58% (126/214)
回答No.2

> ↑と→を同時に押して斜め上に進む様な処理が出来ません。 前にも申したように、同時打鍵はCTRL, SHIFT, ALTに関してしか捕捉されません。ですから、“↑と→を同時に押して”はありえません。また、コンピュータの画面では、“斜めに進むこと”はそういうソフトを書かないかぎり不可能です(通常はタテヨコのジグザグの集まりを人間の目が斜めと認識している)。したがって、ある時点でのキーコードを表す変数は一つあれば十分です。ですから、processingというソフトに、この点に関する不足や不具合はありません。key変数にアクセスするコードを書けば、それで十分です。

wynd
質問者

お礼

ありがとうございます。 ですがjavaで void keyPressed(KeyEvent e) { Key_isDown[e.getKeyCode()] = true; } void keyReleased(KeyEvent e) { Key_isDown[e.getKeyCode()] = false; } のように書いて if (Key_isDown[37] && Key_isDown[38]) { x++; y++; } とすれば一応斜めに動けましたが processingでは if (key == 37 && key ==38) { x++; y++; } では当然ですが動きませんでした。

  • _ranco_
  • ベストアンサー率58% (126/214)
回答No.1

質問の意味がよくわかりませんが、Javaでは現在キーフォーカスのあるGUI上のKeyEventを、そのGUIに登録(add)したKeyListenerで捕捉します。同時打鍵の捕捉は、CTRL, SHIFT, ALTに関してのみ可能です。 もうちょっと、質問の内容を詳しく書いてみてください。

wynd
質問者

補足

processingはjavaに似ている構文のプログラムを書くとそれをjavaのソースコードに変換しそれをコンパイルして実行してくれるソフトです。 そのソフトではキーコードを取得するのにシステム変数のkeyを使いますが、これはもっとも新しく押されたキーの値をひとつしか保持しないためゲームの↑と→を同時に押して斜め上に進む様な処理が出来ません。 プログラム中でjavaのimportが使えるのでキーを調べるメソッドを作ってprocessingで使用できるようにと考えております。

関連するQ&A