J'utilise C # et j'essaie d'obtenir la position de la souris matérielle. La première chose que j'ai essayée était une fonctionnalité XNA simple qui est simple à utiliser
Vector2 position = new Vector2(Mouse.GetState().X, Mouse.GetState().Y);
Après cela, je fais aussi le dessin de la souris, et en comparant avec la souris matérielle Windows, cette nouvelle souris avec les coordonnées fournies par xna "se relâche". J'entends par là qu'il est en retard de quelques images. Par exemple, si le jeu tourne à 600 fps, il sera bien sûr réactif, mais à 60 fps, le retard de la souris logicielle n'est plus acceptable. J'ai donc essayé d'utiliser ce que je pensais être une souris matérielle,
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool GetCursorPos(out POINT lpPoint);
mais le résultat était exactement le même. J'ai également essayé d'obtenir le curseur de formulaire Windows, et c'était une impasse aussi bien - mais avec le même retard. Jouer avec la fonctionnalité xna:
GraphicsDeviceManager.SynchronizeWithVerticalRetrace = true/false
Game.IsFixedTimeStep = true/fale
a changé le temps de retard pour des raisons quelque peu évidentes, mais l'essentiel est qu'indépendamment, il était toujours derrière la souris Windows par défaut. J'ai vu dans certains jeux, qu'ils fournissent une option pour la souris accélérée matériellement, et dans d'autres (je pense) c'est déjà par défaut. Quelqu'un peut-il nous montrer comment y parvenir?
Mouse.GetState()
n'est pas cassé, et tant que les IsFixedTimeStep == true
gens ne devraient pas pouvoir voir le retard à moins d'être comparés directement avec la souris Windows visible. Cependant, en définissant IsFixedTimeStep sur false à un débit d'images inférieur, cela devient visible pour tout le monde. À propos de l'entrée directe, j'ai considéré que c'était une posabilité (dernier recours).
Mouse.GetState()
soit cassé. Êtes-vous sûr d'obtenir la position de la souris dans le même cadre que celui que vous dessinez? Rappelez-vous également que le curseur Windows a activé l'accélération / décélération, donc il se sent plus réactif. Si vous voulez vous rapprocher du matériel, vous devez appuyer sur DirectInput, qui vous donnera des deltas de mouvement au lieu de positions absolues de la souris. Mais je crois queMouse.GetState()
c'est toujours la bonne façon de le faire dans XNA.