Sto usando C # e sto cercando di ottenere la posizione del mouse hardware. La prima cosa che ho provato è stata la semplice funzionalità XNA che è semplice da usare
Vector2 position = new Vector2(Mouse.GetState().X, Mouse.GetState().Y);
Dopo di che faccio anche il disegno del mouse, e confrontandolo con il mouse hardware di Windows, questo nuovo mouse con le coordinate fornite da xna si sta "allentando". Con questo voglio dire, che è dietro di pochi fotogrammi. Ad esempio, se il gioco viene eseguito a 600 fps, la maledizione sarà reattiva, ma a 60 fps il ritardo del mouse del software non è più accettabile. Quindi ho provato ad usare quello che pensavo fosse un mouse hardware,
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool GetCursorPos(out POINT lpPoint);
ma il risultato è stato esattamente lo stesso. Ho anche provato a ottenere il cursore del modulo di Windows, ed è stato anche un vicolo cieco - ha funzionato, ma con lo stesso ritardo. Divertiti con la funzionalità xna:
GraphicsDeviceManager.SynchronizeWithVerticalRetrace = true/false
Game.IsFixedTimeStep = true/fale
ha cambiato il tempo di ritardo per ragioni piuttosto ovvie, ma la linea di fondo è che, indipendentemente da ciò, era ancora dietro il mouse predefinito di Windows. Ho visto in alcuni giochi che forniscono un'opzione per il mouse con accelerazione hardware e in altri (penso) è già di default. Qualcuno può dare qualche indizio su come raggiungere questo obiettivo.
Mouse.GetState()
non è rotto e fintanto che le IsFixedTimeStep == true
persone non dovrebbero essere in grado di vedere il ritardo se non confrontato direttamente con il mouse Windows visibile. Tuttavia, impostando IsFixedTimeStep su false al framerate inferiore, diventa visibile a tutti. A proposito di input diretto ho considerato una posabilità (ultima risorsa).
Mouse.GetState()
sia rotto. Sei sicuro di ottenere la posizione del mouse nella stessa cornice mentre la disegni? Ricorda inoltre che il cursore di Windows ha accelerazione / decelerazione abilitata, quindi sembra più reattivo. Se vuoi avvicinarti all'hardware, dovresti premere DirectInput, che ti darà delta di movimento invece di posizioni assolute del mouse. Ma credo cheMouse.GetState()
sia ancora il modo corretto di farlo in XNA.