我正在使用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
人们不应该看到延迟,除非直接与可见的Windows鼠标比较。但是,在较低帧率下将IsFixedTimeStep设置为false则每个人都可以看到。关于直接输入,我认为是posposability(不得已)。
Mouse.GetState()
坏了。确定要在绘制鼠标的同一帧中找到鼠标位置吗?还记得在Windows光标具有加速/减速启用,所以感觉更加敏感。如果您想更接近硬件,则应点击DirectInput,它将为您提供移动增量而不是绝对的鼠标位置。但是我相信Mouse.GetState()
在XNA中仍然是正确的方法。