1

私はxna Mouseクラスを使用してきましたが、各フレームでマウスの動きを得ることができた唯一の方法は、マウスを毎回画面の中央にリセットし、中央に戻す前に変位を測定することです. これは非常にハックなようで、私のマウスは 5700dpi の解像度をサポートしていますが、xna が画面位置の整数を返す場合、ほとんど確実に得られません。

4

2 に答える 2

1

オフセットの使用Mouse.SetPositionと測定がうまくいかない場合は、XNA 以外の API を使用する必要があります。

使用する API はWM_INPUT. これは、メッセージ ループをフックすることで受信できるメッセージです。(注: XNA の API は と同等WM_MOUSEMOVEであるため、使用しないでください。)

この MSDN ページには、API の選択に関する入門的な詳細と、マウス入力に使用するためのサンプル コード (C++) が含まれています。

Windows のメッセージ ループに慣れていない場合は、Wikipediaから始めてください。これは基本的にネイティブ (C/C++) API であるため、C# から使用するにはいくつかの作業を行う必要があります。

これを自分で行うのに便利なコードはありませんが、メッセージループをフックして を処理できる人へのリンクWM_CHARを次に示します。これはおそらく良い出発点です。

于 2013-06-04T05:02:38.100 に答える
0

私は最近、MouseMove の怪物から自分自身を切り替えましたが、これは役に立ちました。ただし、SharpDX はすでにそのほとんどをRawInputモジュールにラップしているようです。それを除けば、 WndProcをオーバーライドすることで Windows.System.Forms のメッセージ ループをフックできます。WM_INPUT はメッセージ ID 0x00FF です。.NET で共用体を宣言するのは難しく、[StructLayout]属性が必要です。

于 2015-02-11T00:43:20.053 に答える