Я використовую C # і намагаюся отримати апаратне положення миші. Перше, що я спробував, це простий функціонал XNA, який простий у використанні
Vector2 position = new Vector2(Mouse.GetState().X, Mouse.GetState().Y);
Після цього я також малюю мишу, і порівнюючи з апаратною мишею Windows, ця нова миша з наданими xna координатами "відхиляється". Я маю на увазі, що це відстає від кількох кадрів. Наприклад, якщо гра працює на 600 кадрів в секунду, прокляття буде чуйною, але затримка миші при 60 кадрів в секунду вже не прийнятна. Тому я спробував використовувати те, що я вважав апаратною мишкою,
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool GetCursorPos(out POINT lpPoint);
але результат був точно таким же. Я також спробував отримати курсор форми Windows, і це було також тупиком - працював, але з такою ж затримкою. Заплутатися з функцією xna:
GraphicsDeviceManager.SynchronizeWithVerticalRetrace = true/false
Game.IsFixedTimeStep = true/fale
змінив час затримки з дещо очевидних причин, але суть полягає в тому, що незалежно від того, що він все ще був за мишею Windows за замовчуванням. У деяких іграх я бачив, що вони пропонують опцію для апаратної миші, а в інших (я думаю) це вже за замовчуванням. Хто-небудь може дати певну думку про те, як цього досягти.
Mouse.GetState()
не порушено, і поки IsFixedTimeStep == true
люди не мають змоги побачити затримку, якщо не порівнювати безпосередньо з видимою мишею Windows. Однак встановлення IsFixedTimeStep на значення false у нижньому кадрі стає видимим для всіх. Щодо прямого введення я вважав, що можливість (остання можливість).
Mouse.GetState()
це порушено. Ви впевнені, що положення миші отримуєте в тому ж кадрі, що і малюєте? Також пам’ятайте, що курсор Windows увімкнено прискорення / уповільнення, тому він почуває себе більш чуйним. Якщо ви хочете наблизитись до обладнання, вам слід натиснути DirectInput, який дасть вам дельти руху замість абсолютних позицій миші. Але я вважаю, щоMouse.GetState()
це все-таки правильний спосіб зробити це в XNA.