Używam C # i próbuję uzyskać pozycję myszy sprzętowej. Pierwszą rzeczą, którą wypróbowałem, była prosta funkcjonalność XNA, która jest prosta w użyciu
Vector2 position = new Vector2(Mouse.GetState().X, Mouse.GetState().Y);
Następnie wykonuję również rysowanie myszy i w porównaniu z myszą sprzętową systemu Windows, ta nowa mysz z współrzędnymi podanymi przez xna „zwalnia”. Rozumiem przez to, że jest opóźniony o kilka klatek. Na przykład, jeśli gra działa z prędkością 600 kl./s, klątwa będzie reagować, ale przy 60 kl./s opóźnienie myszy programowej nie jest już dopuszczalne. Dlatego próbowałem użyć myszy, która moim zdaniem była sprzętową,
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool GetCursorPos(out POINT lpPoint);
ale wynik był dokładnie taki sam. Próbowałem też uzyskać kursor Windows, i to był ślepy zaułek - działał, ale z tym samym opóźnieniem. Mieszanie z funkcjonalnością xna:
GraphicsDeviceManager.SynchronizeWithVerticalRetrace = true/false
Game.IsFixedTimeStep = true/fale
zmienił czas opóźnienia z dość oczywistych powodów, ale sedno jest takie, że niezależnie od tego, że nadal był za domyślną myszą Windows. Widziałem w niektórych grach, że zapewniają one opcję dla myszy z akceleracją sprzętową, aw innych (tak myślę) jest już domyślnie. Czy ktoś może dać jakieś wskazówki, jak to osiągnąć.
Mouse.GetState()
nie jest zepsuty i tak długo, jak IsFixedTimeStep == true
ludzie nie powinni widzieć opóźnienia, chyba że są porównywane bezpośrednio z myszą z widocznymi oknami. Jednak ustawienie IsFixedTimeStep na wartość false przy niższej liczbie klatek na sekundę staje się widoczne dla wszystkich. O bezpośrednim wejściu uznałem, że jest to możliwość (w ostateczności).
Mouse.GetState()
jest zepsuty. Czy na pewno ustawiasz pozycję myszy w tej samej ramce podczas jej rysowania? Pamiętaj również, że kursor Windows ma włączone przyspieszanie / zwalnianie, więc jest bardziej responsywny. Jeśli chcesz zbliżyć się do sprzętu, powinieneś nacisnąć DirectInput, co da ci deltę ruchu zamiast absolutnej pozycji myszy. Ale uważam, żeMouse.GetState()
nadal jest to właściwy sposób na zrobienie tego w XNA.