Estoy usando C # e intento obtener la posición del mouse de hardware. Lo primero que probé fue la funcionalidad XNA simple que es fácil de usar
Vector2 position = new Vector2(Mouse.GetState().X, Mouse.GetState().Y);
Después de eso, también hago el dibujo del mouse, y en comparación con el mouse de hardware de Windows, este nuevo mouse con coordenadas proporcionadas por xna se está "aflojando". Con eso quiero decir, que está detrás de unos pocos cuadros. Por ejemplo, si el juego se ejecuta a 600 fps, por supuesto, responderá, pero a 60 fps el retraso del mouse por software ya no es aceptable. Por lo tanto, intenté usar lo que pensé que era un mouse de hardware,
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool GetCursorPos(out POINT lpPoint);
pero el resultado fue exactamente el mismo. También intenté obtener el cursor de formulario de Windows, y eso también fue un callejón sin salida, pero funcionó, pero con el mismo retraso. Jugando con la funcionalidad xna:
GraphicsDeviceManager.SynchronizeWithVerticalRetrace = true/false
Game.IsFixedTimeStep = true/fale
cambió el tiempo de retraso por razones algo obvias, pero la conclusión es que, independientemente de que todavía estaba detrás del mouse predeterminado de Windows. He visto en algunos juegos, que ofrecen opciones para el mouse acelerado por hardware, y en otros (creo) ya es por defecto. ¿Alguien puede dar alguna pista sobre cómo lograr eso?
Mouse.GetState()
no está roto, y mientras las IsFixedTimeStep == true
personas no puedan ver el retraso a menos que se comparen directamente con el mouse de Windows visible. Sin embargo, si se establece IsFixedTimeStep en falso a una velocidad de fotogramas más baja, será visible para todos. Acerca de la entrada directa, lo consideré una posibilidad (último recurso).
Mouse.GetState()
esté roto. ¿Está seguro de que está obteniendo la posición del mouse en el mismo marco que lo está dibujando? Recuerde también que el cursor de Windows tiene habilitada la aceleración / desaceleración, por lo que se siente más sensible. Si desea acercarse al hardware, debe presionar DirectInput, que le dará deltas de movimiento en lugar de posiciones absolutas del mouse. Pero creo queMouse.GetState()
sigue siendo la forma correcta de hacerlo en XNA.