मैं C # का उपयोग कर रहा हूं और हार्डवेयर माउस स्थिति प्राप्त करने की कोशिश कर रहा हूं। पहली बात जो मैंने कोशिश की थी वह सरल XNA कार्यक्षमता थी जो उपयोग करने के लिए सरल है
Vector2 position = new Vector2(Mouse.GetState().X, Mouse.GetState().Y);
उसके बाद मैं माउस की ड्राइंग भी करता हूं, और विंडोज़ हार्डवेयर माउस की तुलना में, xna प्रदान किया गया निर्देशांक वाला यह नया माउस "स्लैकिंग ऑफ" है। मेरा मतलब है कि यह कुछ फ्रेम से पीछे है। उदाहरण के लिए यदि गेम 600 एफपीएस पर चल रहा है, तो यह उत्तरदायी होगा, लेकिन 60 एफपीएस सॉफ्टवेयर माउस में देरी अब स्वीकार्य नहीं है। इसलिए मैंने कोशिश की कि मुझे लगा कि हार्डवेयर माउस है,
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool GetCursorPos(out POINT lpPoint);
लेकिन परिणाम बिल्कुल वही था। मैंने विंडोज फॉर्म कर्सर प्राप्त करने की भी कोशिश की, और यह एक मरा हुआ अंत भी था - काम किया, लेकिन उसी देरी के साथ। Xna कार्यक्षमता के साथ खिलवाड़ करना:
GraphicsDeviceManager.SynchronizeWithVerticalRetrace = true/false
Game.IsFixedTimeStep = true/fale
कुछ स्पष्ट कारणों के लिए देरी के समय को बदल दिया, लेकिन लब्बोलुआब यह है कि चाहे वह अभी भी डिफ़ॉल्ट विंडोज माउस के पीछे था। मुझे कुछ गेम्स में देखा गया है, कि वे हार्डवेयर एक्सेलरेटेड माउस के लिए विकल्प प्रदान करते हैं, और अन्य में (मुझे लगता है) यह पहले से ही डिफ़ॉल्ट रूप से है। किसी को भी कैसे हासिल करने पर कुछ नेतृत्व दे सकते हैं।
Mouse.GetState()
टूटा हुआ नहीं है, और जब तक IsFixedTimeStep == true
लोग दिखाई देने वाले विंडोज़ माउस के साथ सीधे तुलना नहीं करते हैं, तब तक विलंब को देखने में सक्षम नहीं होना चाहिए। हालाँकि, कम फ्रैमरेट में झूठे को IsFixedTimeStep सेट करना यह सभी के लिए दृश्यमान हो जाता है। प्रत्यक्ष इनपुट के बारे में मैंने माना कि एक सकारात्मकता (अंतिम उपाय)।
Mouse.GetState()
कि टूटा हुआ है। क्या आप सुनिश्चित हैं कि आप उसी स्थिति में माउस स्थिति प्राप्त कर रहे हैं जैसे आप उसे खींच रहे हैं? यह भी याद रखें कि विंडोज कर्सर में त्वरण / मंदी सक्षम है, इसलिए यह अधिक उत्तरदायी लगता है । यदि आप हार्डवेयर के करीब जाना चाहते हैं, तो आपको DirectInput को हिट करना चाहिए, जो आपको पूर्ण माउस पोजीशन के बजाय मूवमेंट डेल्टास देगा। लेकिन मेरा माननाMouse.GetState()
है कि यह अभी भी XNA में करने का सही तरीका है।