問題タブ [keyrelease]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - ユーザーが実際にJavaでキーをリリースしたことを知る方法は?
(わかりやすくするために編集)
キーボードの自動リピート機能を無視して、ユーザーがJavaSwingでキーを押して離したときを検出したいと思います。また、Linux、Mac OS、およびWindowsで動作する純粋なJavaアプローチを希望します。
要件:
- ユーザーがいくつかのキーを押したとき、それがどのキーか知りたいです。
- ユーザーがキーを離したとき、それがどのキーか知りたいです。
- システムの自動リピートオプションを無視したい:キーを押すたびに1つのキープレスイベントを受け取り、キーを離すごとに1つのキーリリースイベントだけを受け取りたい。
- 可能であれば、項目1から3を使用して、ユーザーが一度に複数のキーを押しているかどうかを確認します(つまり、ユーザーが「a」を押し、離さずに「Enter」を押します)。
私がJavaで直面している問題は、Linuxでは、ユーザーがキーを押したときに、多くのkeyPressイベントとkeyReleaseイベントが発生することです(キーボードの繰り返し機能のため)。
私はいくつかのアプローチを試しましたが成功しませんでした:
- キーイベントが最後に発生した時刻を取得します。Linuxでは、キーの繰り返しではゼロのように見えますが、MacOSではそうではありません。
- 現在のkeyCodeが最後のkeyCodeと異なる場合にのみ、イベントを検討します。これにより、ユーザーは同じキーを2回続けて押すことができなくなります。
コードの基本的な(機能しない)部分は次のとおりです。
ユーザーがキー(つまり、「p」)を保持すると、システムは次のように表示します。
少なくともLinuxでは、キーが保持されている間、JVMはすべてのキーイベントを再送信し続けます。さらに難しいことに、私のシステム(Kubuntu 9.04 Core 2 Duo)では、タイムスタンプが変化し続けます。JVMは、同じタイムスタンプでキーの新しいリリースと新しいキーの押下を送信します。これにより、キーが実際にいつリリースされたかを知ることが難しくなります。
何か案は?
ありがとう
opengl - OpenGL/Gtkmm ゲーム - キーボードの移動
「OpenGL」でゲームをプログラミングし、「Gtkmm」をウィンドウマネージャーとして使用しています。カメラの移動にキーボードを使用したい(つまり、「UPキー」で前進、「DOWNキー」で後退など...)
しばらく前に、Java でプログラミングしたとき、この手法を使用して「移動」
しました。たとえば、アプリケーションが「UPキーを押して」信号を受信すると、その後、フラグ「shouldMoveForward」を「true」に設定し、後で「UP-key- release」信号を受信すると、フラグを「false」に戻します。
そして、「ゲームループ」はそのフラグを継続的にチェックし、それが真であればカメラを前方に動かし、そうでなければ何もしませんでした。
「Gtkmm」でも同じテクニックを使いたいと思います。したがって、 「Gtk::DrawingArea」のこれらの関数をオーバーライドしました。
しかし、問題は次のとおりです。たとえば、「UP」キーを押して 5 秒間押し続けると、次の一連の信号が発せられます。
「Linux で」ゲームを実行しているときに、前の状況が表示されます。
私が「Windows上」にいるとき、それは私が望むとおりです。
したがって、これは Gtkmm でカメラを移動するための「移植性のない」ソリューションのようです。
Gtkmm をウィンドウ マネージャーとして使用してカメラの移動を実現する他の ( 「PORTABLE」 ) ソリューションはありますか?
unit-testing - QT:QT::keyReleaseを使用する場合
たくさんのメニューを使って別のアプリケーションをテストするテストアプリを書いています。QT::keyPressを使用してkeyPressをシミュレートします。ただし、ある時点で、keyReleaseも使用する必要があることを知るまで、keyPressesを受け入れなくなります(私にとって少し曖昧だったドキュメントによると、「注:ある時点で、を使用してキーを解放する必要があります。 keyRelease()。 "---しかし、いつ?各keyPressの直後?)
各keyPressの後にkeyReleaseを呼び出すと、keyPressもシミュレートされます。これは奇妙なことです。keyPressを最初に呼び出した後にkeyReleaseを1回呼び出すと、残りのkeyPressが機能し、残りのkeyPressは機能しなくなりました。
よくわかりません。keyReleaseを使用する適切な時期を誰かに教えてもらえますか?
ruby - キープレスとキーリリースイベントをシミュレートするRubyモジュール?
さまざまなユーザーをシミュレートするアプリケーションを作成したいのですが、この「ゴースト」ユーザーがキーボードで入力する必要があります。Ruby でキープレスとキーリリース イベントをシミュレートするにはどうすればよいですか?
python - それらをトラップせずにキーボードイベントをリッスンしますか?
X Windows で Control キーのリリース イベントをリッスンし、それらを検出すると別のプロセスに警告するコマンド ライン アプリケーションを作成しています。
GNU/Linux は初めてなので、GCC をいじるのは避けたいので、スクリプト ベースのソリューションを探しています。私は Python を少し知っているので、Python ベースのソリューションを選択するのは当然のことのように思えました。インターネットで例を探し、Python Xlib のドキュメントを読んだ後、動作するこのプログラムをまとめましたが、注意点があります。それらをリッスンするだけでなく、イベント (つまり、そのようなイベントは、最初に送信されたアプリケーションに渡されなくなります)。
「xev」を実行して、コントロール キー コードを追跡しました。修飾キーを再マップしたので、あなたのシステムでは異なるかもしれません。
簡単にするために、外部プロセスを扱うコードは省略しています。
ご協力ありがとうございました。
ソフトウェア:
パイソン 2.7.2
Python Xlib 0.15 RC1
Perl v5.10.1
Debian GNU/Linux バージョン: 6.0.3
カーネル バージョン: Linux debian 2.6.32-5-686
編集:私が理解できないのは、キーボードイベントが処理されない限りトラップされないことです(私のプログラムでは、これは「print "KeyRelease"」という行が実行されることを意味します)。私のコードでは、Xlib でもイベント オブジェクトでもメソッドを呼び出していないので、処理の違いがどこにあるのかわかりません。
EDIT2: Xlib を使用する以外の代替ソリューションに関する提案も歓迎します。
EDIT3: 私は Perl も知っています。システム ライブラリの最新バージョンを必要としない限り、役立つ Perl ライブラリに関する提案も大歓迎です。Debian はリポジトリで利用可能なパッケージに関して遅れをとることで悪名高く、コンパイルライブラリの最新バージョンのインストールは、多くの依存関係がある場合は困難になる可能性があります (PyGTK をインストールしようとしましたが、インストールした最新の GLib を参照できなかったため、あきらめました)。
java - 繰り返されるキーを無視して、複数のキーの押下を処理します
私は別の質問のコメントセクションでこれを尋ねました(> Javaで同時キー押下を処理するにはどうすればよいですか?)、まったく新しい質問をするように求められました。
私の問題は、キー押下のArrayListを作成するときに、ユーザーがキーを押したままにすると、keyReleasedイベントを介してそれらが十分に速く削除されないことです。「asdf」と北、東、南、西、北東などの動きをしたいです。
両方のイベントのコードは次のとおりです。
lastKey(String)変数を介して2番目のチェックを追加するまで、ピラミッドが作成したものは膨大でした。その2番目のチェックを行っても、リストは大きくなり、ほとんどの場合、2〜3個の重複があります。私のキャラクターがぎこちなく動いているので、これに関するどんな助けも素晴らしいでしょう。:(
また、char、string、arrayListへの重複した変換を削除する方法はどれも素晴らしいでしょう。私は緊張しているので、「単純な」ものにあまりにも多くの型を使用しました。
java - Java アプレット強制キー解放
ゲームオーバー時に「ゲームオーバー」画面が表示されるゲームがあります。ゲーム オーバー画面から新しいゲームを開始するために、ユーザーはスペース バーを押すように求められます。私のゲームでは、ユーザーはスペースバーを押して (押したままにして) 攻撃を実行します。私のスレッドでは、ユーザーまたは AI の健康状態がゼロ以下になった場合 (およびそのとき)、ゲーム オーバー画面が表示されます。したがって、ゲームオーバーのスペースバーがダウンし、ゲームオーバー画面が一瞬ちらつき、ゲームが開始される可能性が高くなります (従来の keyPress ステートメントの代わりに物事をスムーズにするために、私が使用しているrepaint() 関数を実行するスレッドに影響するブール値)。私の質問は、リリースされている画面を「模倣」するために入力する必要がある構文またはコマンドは何ですか?
python - PyQt4-頻繁に押して放すと検出されたキーを押し続けますか?
QApplicationが重要なイベントを処理するときに、いくつかの異常な動作に気づきました。これは、私が作成したいと思っていた小さなゲームを危険にさらします。
キーを押したままにすると、一度トリガーしてキーが解放されてもう一方がトリガーされるのを待つのではなく、keyPressEvent
thenメソッドが繰り返し(そして非常に頻繁に)呼び出されます(これは望ましい、確かに期待される動作です)。keyReleaseEvent
keyPressEvent
これにより、パフォーマンスの大きな問題が発生します。複数のキーを押したままにすると、プログラムによって一部が完全に無視されるようになります。これは、おそらくイベントキューが問題になっているためです。
このプログラムは、繰り返される呼び出しを示しています。
このプログラム(Qtのゲームの可能性をテストするために使用していたばかげたグラフィカルなもの)は、既存のキーを保持するときに新しく押されたキーを無視することを示しています。
上記のプログラムを実行するとわかるように、3つまたは4つを超えるキーを押し続けると、現在保持されているキーが解放されるまで、新しいスパイクは確立されません。
keyPressEvent
物理的に解放されていないキーに対して1回だけトリガーされるような、この動作を防ぐにはどうすればよいですか?
java - JComboBoxKeyReleasedイベントが機能しない
JComboBox
SQLDBからクエリを検索するためにを使用しています。文字を入力したときにクエリを検索したい。NetBeansIDEを使用しています。これが自動化されたコードです。
しかし、何も起こりません。コードの検索にエラーはないのではないかと思います。IDEからの自動コードなしでこれを行うためのコードを教えてください。の名前はJComboBox
ですsrch
。コンボボックスeditable=true。ありがとうございました。