Saya menggunakan C # dan mencoba untuk mendapatkan posisi mouse perangkat keras. Hal pertama yang saya coba adalah fungsionalitas XNA sederhana yang mudah digunakan
Vector2 position = new Vector2(Mouse.GetState().X, Mouse.GetState().Y);
Setelah itu saya melakukan menggambar mouse juga, dan membandingkannya dengan mouse hardware windows, mouse baru ini dengan koordinat yang disediakan xna adalah "slacking off". Maksud saya, bahwa itu di belakang oleh beberapa frame. Misalnya jika game berjalan pada 600 fps, tentu saja itu akan responsif, tetapi pada 60 fps perangkat lunak penundaan mouse tidak lagi dapat diterima. Karena itu saya mencoba menggunakan apa yang saya pikir adalah mouse perangkat keras,
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool GetCursorPos(out POINT lpPoint);
tetapi hasilnya persis sama. Saya juga mencoba mendapatkan kursor bentuk Windows, dan itu jalan buntu juga - bekerja, tetapi dengan penundaan yang sama. Berputar-putar dengan fungsionalitas xna:
GraphicsDeviceManager.SynchronizeWithVerticalRetrace = true/false
Game.IsFixedTimeStep = true/fale
memang mengubah waktu tunda untuk alasan yang agak jelas, tetapi intinya adalah bahwa terlepas itu masih di belakang mouse Windows default. Saya pernah melihat di beberapa permainan, bahwa mereka menyediakan opsi untuk mouse yang dipercepat perangkat keras, dan yang lain (saya pikir) sudah secara default. Adakah yang bisa memberikan petunjuk tentang cara mencapai itu.
Mouse.GetState()
tidak rusak, dan selama IsFixedTimeStep == true
orang seharusnya tidak dapat melihat penundaan kecuali dibandingkan langsung dengan windows mouse yang terlihat. Namun pengaturan IsFixedTimeStep ke false di framerate yang lebih rendah menjadi terlihat oleh semua orang. Tentang input langsung saya menganggap itu suatu kemungkinan (pilihan terakhir).
Mouse.GetState()
rusak. Apakah Anda yakin bahwa Anda mendapatkan posisi mouse di bingkai yang sama seperti saat Anda menggambarnya? Ingat juga bahwa kursor Windows memiliki akselerasi / deselerasi yang diaktifkan, sehingga terasa lebih responsif. Jika Anda ingin lebih dekat dengan perangkat keras, Anda harus menekan DirectInput, yang akan memberi Anda gerakan delta alih-alih posisi mouse absolut. Tapi saya percayaMouse.GetState()
masih cara yang benar untuk melakukannya di XNA.