Scene Builderでキー同時押しを判定したい
Scene Builedrでキー入力処理を作っていたので
備忘録もかねて書いておく。
SceneBuilderでキー入力を判定するメソッド
Scene Builderでは以下の2つが対象になる。
- setOnKeyPressed
キー押下~キーを話す直前までの操作。
つまり、押しっぱなしの際もこのメソッドで判定される。 - setOnKeyReleased キーを離した瞬間の操作。
単体キー押下は色んな参考サイトがある。
下記のサイトを参考にしながら、キー入力操作を見よう見まねで作っていた。
lovedvoraklayout.hatenablog.com
https://itech-program.com/java/1233
しかし、同時押しについてはほとんど情報がなく途方に暮れていた。
どちらもキー入力があった場合に同時押しと判定する。
やり方がどうしてもわからないので、以下のようにした。
どのキーが押されたかを判定し、押されたキーに対してフラグをつける。
TRUEになったフラグが2つあった場合は、同時押しと判定して処理をする。
単体キーは同時押し以外の条件として処理する。こうしないと、同時押し+単体キーの入力判定になってしまうため。
とりあえずこれで「同時押し」の判定はできるようになった。
下記は上キーとWキーの同時押しを判定したものである。
scene.setOnKeyPressed(new EventHandler<KeyEvent>() { @Override public void handle(KeyEvent e) { if(e.getCode() == KeyCode.UP) { upFlg = true; } if(e.getCode() == KeyCode.W) { wFlg = true; } //同時押しと判定する if(upFlg && wFlg) { System.out.println("同時押し"); } else { if(upFlg) { System.out.println("↑"); } if(wFlg) { System.out.println("w"); } } } });
しっかしひどいプログラムコードしてんな初心者か
同時押しするときの問題
しかし上記の方法には問題がある。
最初に同時押しをした場合、↑かWどちらかのキー判定と同時押しのキー判定が起きる。
この現象はキーボードの仕様なのか、プログラムの欠陥なのかまだわかっていない。
現状大きな問題ではないので、特に解決する気はない。
余裕があったら一度調べてみようと思う。
あのあと調べてみたらこのコードで問題なく動いた。 うーん何だったのだろう( ˙-˙ )