私はC#を使用していて、ハードウェアマウスの位置を取得しようとしています。最初に試したのは、使いやすいシンプルなXNA機能です。
Vector2 position = new Vector2(Mouse.GetState().X, Mouse.GetState().Y);
その後、マウスの描画も行い、Windowsハードウェアマウスと比較して、xnaが提供する座標を持つこの新しいマウスは「ずれ」ています。つまり、数フレーム遅れているということです。たとえば、ゲームが600 fpsで実行されている場合、呪いは反応しますが、60 fpsのソフトウェアではマウスの遅延は許容できなくなります。そこで、ハードウェアマウスだと思ったものを使ってみました。
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool GetCursorPos(out POINT lpPoint);
しかし、結果はまったく同じでした。私はまた、Windowsフォームカーソルを取得しようとしましたが、これも行き止まりでした-動作しましたが、同じ遅延がありました。xna機能をいじくりまわす:
GraphicsDeviceManager.SynchronizeWithVerticalRetrace = true/false
Game.IsFixedTimeStep = true/fale
やや明白な理由で遅延時間を変更しましたが、肝心な点は、それがデフォルトのWindowsマウスの背後にあるにもかかわらずです。一部のゲームでは、ハードウェアアクセラレートマウスのオプションが提供されていることがわかりました。誰でもそれを達成する方法についていくつかのリードを与えることができますか?
Mouse.GetState()
壊れていませんIsFixedTimeStep == true
。可視ウィンドウマウスと直接比較しない限り、遅延を確認できないはずです。ただし、低いフレームレートでIsFixedTimeStepをfalseに設定すると、すべての人に表示されます。直接入力については可能性(最後の手段)と考えました。
Mouse.GetState()
壊れているとは思いません。描画しているのと同じフレームでマウスの位置を取得していますか?また、Windowsカーソルでは加速/減速が有効になっているので、応答性が高くなります。ハードウェアに近づきたい場合は、DirectInputを押してください。これにより、マウスの絶対位置ではなく、動きのデルタが得られます。しかし、私はMouse.GetState()
XNAでそれを行う正しい方法がまだあると信じています。