• ベストアンサー

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

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

  • 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; } } }

  • 複数のキー入力の方法

    同時に押された複数のキーの キーコードを取得できないでしょうか? 分かる方がいたら教えてください。

  • キー入力の取得

    お世話になっております。 VC2005を使用しております。 SDIプログラムのFormViewを使用してプログラムを作成しております。 メイン画面においてキーの入力(スペース等)を認識したいのですが方法がわかりません。 Formの場合KeyPreviewをTrueにするという方法がありますが、FormViewには無いような気がします。 どのようにすればよいのでしょうか? 教えてください。

  • 複数のテーブルからのデータ取得と連結

    いつもお世話になっております。 JavaでDBからデータを取得するプログラムを作成中です。 単純なものは問題無いのですが、 複数のテーブルからデータを取得し、そのデータを連結させるプログラムを作りたいのですがわからず困っています。 テーブル1 コードA(Key)       名称A テーブル2 コードB(Key)       名称B テーブル3 コードA(Key)       コードB(Key)       コードC(Key)       名称C となっており、取得したデータを 名称A+名称B+名称C と表示したいのですが、どのような処理を行えばよいのでしょうか? ちなみに複数のレコードを操作するプログラムも作ったことが無いレベルです。 どなたかご教授お願いします。

    • ベストアンサー
    • Java
  • Ctrlキーの押しっぱなし

    初心者のmikaninuです。 マルチセレクトにしてマウスクリックで複数選択したいのですが、 Ctrlキーの押しっぱなしをプログラムでできないのでしょうか? マウスキーだけで操作できるようにしたいのです。 キーコードは取得できるのですが、その使い方がわかりません。 誰か教えていただけないでしょうか。 お願いします。 本当に本当にお願いします!!!!

  • 一つのキーで一連のキー動作ができるソフト

    一つのキーで一連のキー動作ができるソフト を探しています 別のプログラム中に使用でき、 何種類もの一連の動作を それぞれ違うキーに設定したり できるようなソフトがあれば教えて もらえないでしょうか? マウス操作も組み込めればいうことないのですが・・ よろしくお願いします。

  • 「続行するには何かキーを押してください」の方法は?

    例えばWindowsのクリーンインストール時に「続行するには何かキーを押してください」といったメッセージが表示されて、キーを押さないとそこから進まないといったものがありますよね。これと同様のことをCUIベースのJavaプログラムでやりたいのですが、その方法あるいはサンプルコードの掲載されているサイトなどはありますでしょうか?

    • ベストアンサー
    • Java
  • バックグラウンドでキー監視

     こんにちは。c#初心者兼、"java始めました" です。  題の通り、知りたいのはフォーカスがない状態、というか、バックグラウンド・常駐状態で押されたキーを取得する方法です。  c#ではGetAsyncKeyStateメソッドを使えば出来ましたが、javaはそれらしいものが見つからなというか、見つからなくはないのですが、使い方がよくわかりません。  それ以外はKeyListenerを使う(フォーカスがないと使えない)パターンの物しかなく、目的のものが見つかりませんでした。  どなたか、わかる方いらっしゃいましたら教えてください。

  • 登録したレコードの主キーの取得方法

    主キーに自動インクリメント( nextval )を使用しているテーブルで、 そこにレコードを登録したときにそのとき使われた主キー を取得する方法はありますでしょうか。 例えば 主キー|データ 1|AAA 2|BBB 3|CCC にDDDと登録したら恐らくは4になるのですが、 主キー|データ 1|AAA 2|BBB 3|CCC 4|DDD ←追加された データを登録したときにその主キーに何が使われたかが知りたいです が知りたいです。 自分で考えてる方法は今の主キーで使ってるシーケンス+1が割り当てられる(だろう)というやり方なのですが、複数のレコード登録が同時にあった場合に不整合が起きるのでどうしたものかと困ってます。 なにか良い方法をご存知の方いらっしゃいましたらお教えください。

  • 複数のJavaプログラムでデータを共有する方法について

    レベルの低い質問だとは思うのですが、相談にのってください。 Javaでコンソールプログラムを作っています。 コマンドプロンプトを複数立ち上げ、同じJAVAプログラムを同時に実行します。(プログラムは同じですが、処理内容はそれぞれ異なります。並列な処理です。) これら複数のプログラム同士でデータ(処理の進捗状況など)を共有するにはどうすればいいでしょうか。(そもそもそんなことができるのでしょうか) 今考えているのは、共有データ用のテキストファイルを1つ作り、それを各プログラムが参照(読んだり書き込んだり)する、ということ考えています。しかし、これだと複数のプログラム同士が同時にファイルを読み書きするようなタイミングがあるかもしれず、思ったような動作をしないかもしれません。 そこで、質問です。 (1)今回のような場合(コマンドプロンプトを複数立ち上げ、同じJAVAプログラムを同時に実行)で、データ共有に使えそうなトピックや方法があれば、お教えください。ヒントでもなんでもいいです。(とりあえず、ちょっとした付け焼刃でなんとか動いてほしいので……) (2)「コマンドプロンプトを複数立ち上げ、同じJAVAプログラムを同時に実行」しているのは、単に私の技術が低いからです。今後プログラムを根本的に書き直して改良するために、今後どのようなJavaのトピックを勉強すればいいでしょうか。 乱文失礼いたしました。どうかよろしくお願いします。