4

私はクロスプラットフォームのゲーム エンジンを構築しており、現在は入力システムに注力しています。

私は、メッセージを渡し、別のスレッドで実行されているプラ​​ットフォーム依存モジュールによって供給される抽象的な入力システムを作成しました。

Windows では、入力システムに RAWINPUT からのメッセージ (プラットフォームに依存しないものに変換) を供給する「メッセージのみ」のウィンドウを作成しました。

現在、UNIX ベースのシステムで同様のことを行う方法を理解するのに苦労しています。カーネルから入力 (keyup、keydown、mousemove...) を取得する便利な方法はありますか? または、ウィンドウを表示する必要のない他の方法はありますか?

編集

入力システムをレンダラーに依存させたくありません。レンダラーは、アプリのフォーカスが変更されたときに入力を通知する必要があります...そのため、入力システムをレンダラーとは異なるスレッドで実行したいと考えています。

4

3 に答える 3

5

通常、クロスプラットフォームの入力はラッパー ライブラリを使用して実現されます。SDLはそれが得意なライブラリであり、現在のバージョンは BSD ライセンスです。

ラッパーを使用する利点は非常に大きいため、Windows で独自のソリューションを使用する Windows ゲームでさえ、Linux で実行する場合は SDL をラッパーとして使用する傾向があります (これが SDL が作成された最初の理由です)。

したがって、最悪の場合、ライブラリを Windows に保持し、特に *nix システムでの実装には SDL を使用することもできます。

于 2012-01-30T13:13:19.987 に答える
3

X11 を使用していると仮定します。

Peter Hutterer は一連の XInput2 記事を書いています。どうやら生のイベントをサポートしています。

ManyMouseは、ウィンドウなしで XInput2 を使用すると主張しています

  • Unix システムでは、可能であれば XInput2 拡張を使用しようとします。ManyMouse は、利用可能な X サーバーがない場合、または X サーバーが XInput2 をサポートしていない場合、他のアプローチにフォールバックしようとします。XInput2 ターゲットを使用する場合は、dlopen() を使用して X11/XInput2 ライブラリを検索するため、必ず「-ldl」でリンクしてください。Xlib に直接リンクする必要はありません。ライブラリがエンド ユーザーのシステムに存在しない場合、ManyMouse は適切に失敗します (ManyMouse XInput2 ドライバーにマウスがないと報告されます)。当然、システムに X11 ヘッダーが必要になります (Ubuntu では、libxi-dev を apt-get install する必要があります)。ゼロに定義された SUPPORT_XINPUT2 でビルドして、XInput2 サポートを完全に無効にすることができます。 XInput2 ターゲットでは、アプリが X11 ウィンドウを提供する必要がないことに注意してください。test_manymouse_stdio アプリは、X サーバーが実行されている限り、このターゲットで動作します。X11 DGA 拡張機能は XInput2 と競合することに注意してください (具体的には、SDL が使用する可能性があります)。これは、SDL 1.2 でこれを処理する良い方法です。

ソースを確認する価値があるかもしれません。

于 2012-01-30T22:43:13.270 に答える
0

X Window システムでは、入力専用ウィンドウの概念があり、これは Windows のメッセージ専用ウィンドウとほぼ同じです。

于 2012-01-30T19:41:36.840 に答える