C # kullanıyorum ve donanım fare konumunu almaya çalışıyorum. Denediğim ilk şey, kullanımı basit olan basit XNA işleviydi
Vector2 position = new Vector2(Mouse.GetState().X, Mouse.GetState().Y);
Bundan sonra farenin çizimini de yapıyorum ve windows donanım faresine kıyasla, xna sağlanan bu yeni fare koordinatları "yavaşlıyor". Demek istediğim, birkaç kare geride kalıyor. Örneğin, oyun 600 fps'de çalışıyorsa, lanet cevap verir, ancak 60 fps yazılımda fare gecikmesi artık kabul edilemez. Bu yüzden bir donanım faresi olduğunu düşündüğüm şeyi kullanmayı denedim,
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool GetCursorPos(out POINT lpPoint);
ama sonuç tamamen aynıydı. Ayrıca Windows form imlecini almayı denedim ve bu da iyi bir sonuçtu, ancak aynı gecikmeyle. Xna işlevselliği ile uğraşmak:
GraphicsDeviceManager.SynchronizeWithVerticalRetrace = true/false
Game.IsFixedTimeStep = true/fale
gecikme süresini biraz belirgin nedenlerle değiştirdi, ancak sonuçta, varsayılan Windows faresinin arkasında olmasına rağmen. Bazı oyunlarda donanım hızlandırılmış fare için seçenek sunduğunu gördüm ve diğerlerinde (sanırım) zaten varsayılan olarak. Herkes bunu başarmak için biraz yol açabilir.
Mouse.GetState()
kırık değildir ve IsFixedTimeStep == true
insanlar doğrudan görünür fare faresiyle karşılaştırılmadıkça gecikmeyi göremez. Ancak IsFixedTimeStep öğesini alt kare hızında false olarak ayarlamak herkes tarafından görülebilir. Doğrudan giriş hakkında bir olasılık (son çare) olduğunu düşündüm.
Mouse.GetState()
Kırıldığını sanmıyorum . Fare konumunu çizdiğinizle aynı çerçevede aldığınızdan emin misiniz? Ayrıca Windows imlecinin hızlanma / yavaşlamanın etkin olduğunu unutmayın, bu yüzden daha duyarlı hissediyor . Donanıma daha yakın olmak istiyorsanız, DirectInput'a basmalısınız, bu da mutlak fare konumları yerine hareket deltaları verecektir. AncakMouse.GetState()
XNA'da bunu yapmanın hala doğru yolu olduğuna inanıyorum .