Я использую C # и пытаюсь получить аппаратную позицию мыши. Первым делом я попробовал простую функциональность XNA, которая проста в использовании
Vector2 position = new Vector2(Mouse.GetState().X, Mouse.GetState().Y);
После этого я также делаю рисование мыши и, по сравнению с аппаратной мышью Windows, эта новая мышь с координатами xna "отключается". Под этим я подразумеваю, что он отстает на несколько кадров. Например, если игра работает на скорости 600 к / с, то, конечно, она будет отзывчивой, но при 60 к / с программная задержка мыши больше не будет приемлемой. Поэтому я попытался использовать то, что считал аппаратной мышью,
[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.