Ich verwende C # und versuche, die Position der Hardware-Maus zu ermitteln. Als erstes habe ich versucht, eine einfache XNA-Funktionalität zu verwenden
Vector2 position = new Vector2(Mouse.GetState().X, Mouse.GetState().Y);
Danach zeichne ich auch die Maus und vergleiche sie mit der Windows-Hardware-Maus. Diese neue Maus mit den von xna bereitgestellten Koordinaten lässt nach. Damit meine ich, dass es nur wenige Frames hinter sich hat. Wenn das Spiel beispielsweise mit 600 fps läuft, reagiert es fluchend, aber mit 60 fps ist eine Software-Mausverzögerung nicht mehr akzeptabel. Deshalb habe ich versucht, eine Hardware-Maus zu verwenden.
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool GetCursorPos(out POINT lpPoint);
aber das Ergebnis war genau das gleiche. Ich habe auch versucht, den Windows-Formularcursor abzurufen, und das war auch eine Sackgasse - funktioniert, aber mit der gleichen Verzögerung. Mit der xna-Funktionalität herumspielen:
GraphicsDeviceManager.SynchronizeWithVerticalRetrace = true/false
Game.IsFixedTimeStep = true/fale
Ich habe die Verzögerungszeit aus etwas offensichtlichen Gründen geändert, aber das Fazit ist, dass sie sich immer noch hinter der Standard-Windows-Maus befand. Ich habe in einigen Spielen gesehen, dass sie eine Option für hardwarebeschleunigte Mäuse bieten, und in anderen (glaube ich) ist dies bereits standardmäßig der Fall. Kann jemand einen Hinweis geben, wie dies erreicht werden kann?
Mouse.GetState()
ist nicht kaputt und solange die IsFixedTimeStep == true
Leute keine Verzögerung sehen können, es sei denn, sie werden direkt mit der sichtbaren Windows-Maus verglichen. Wenn Sie IsFixedTimeStep jedoch bei niedrigerer Framerate auf false setzen, wird es für alle sichtbar. Über direkte Eingabe hielt ich das für eine Beweglichkeit (letzter Ausweg).
Mouse.GetState()
es kaputt ist. Sind Sie sicher, dass Sie die Mausposition im selben Rahmen erhalten, in dem Sie sie zeichnen? Denken Sie auch daran , dass die Windows - Cursor haben Beschleunigung / Verzögerung aktiviert, so dass es fühlt sich mehr ansprechbar. Wenn Sie näher an die Hardware heranrücken möchten, sollten Sie DirectInput drücken, um Bewegungsdeltas anstelle der absoluten Mauspositionen zu erhalten. Aber ich glaube, esMouse.GetState()
ist immer noch der richtige Weg, dies in XNA zu tun.