私はxna Mouseクラスを使用してきましたが、各フレームでマウスの動きを得ることができた唯一の方法は、マウスを毎回画面の中央にリセットし、中央に戻す前に変位を測定することです. これは非常にハックなようで、私のマウスは 5700dpi の解像度をサポートしていますが、xna が画面位置の整数を返す場合、ほとんど確実に得られません。
2 に答える
オフセットの使用Mouse.SetPosition
と測定がうまくいかない場合は、XNA 以外の API を使用する必要があります。
使用する API はWM_INPUT
. これは、メッセージ ループをフックすることで受信できるメッセージです。(注: XNA の API は と同等WM_MOUSEMOVE
であるため、使用しないでください。)
この MSDN ページには、API の選択に関する入門的な詳細と、マウス入力に使用するためのサンプル コード (C++) が含まれています。
Windows のメッセージ ループに慣れていない場合は、Wikipediaから始めてください。これは基本的にネイティブ (C/C++) API であるため、C# から使用するにはいくつかの作業を行う必要があります。
これを自分で行うのに便利なコードはありませんが、メッセージループをフックして を処理できる人へのリンクWM_CHAR
を次に示します。これはおそらく良い出発点です。
私は最近、MouseMove の怪物から自分自身を切り替えましたが、これは役に立ちました。ただし、SharpDX はすでにそのほとんどをRawInputモジュールにラップしているようです。それを除けば、 WndProcをオーバーライドすることで Windows.System.Forms のメッセージ ループをフックできます。WM_INPUT はメッセージ ID 0x00FF です。.NET で共用体を宣言するのは難しく、[StructLayout]属性が必要です。