Xbox thumbstick स्प्राइट को घुमाने के लिए उपयोग किया जाता है, बुनियादी सूत्र इसे "छड़ी" या 90 डिग्री के अंतराल पर "चिपचिपा" महसूस करता है! आप चिकनी रोटेशन कैसे प्राप्त करते हैं?


9

मैं एक बहुत ही मूल सूत्र का उपयोग कर रहा हूं कि एक्सबॉक्स कंट्रोलर थंबस्टिक के आधार पर मेरे स्प्राइट (उदाहरण के लिए स्पेसशिप) को किस कोण पर गणना की जानी चाहिए यानी आप जहाज को घुमाने के लिए थंबस्टिक का उपयोग करते हैं।

मेरी मुख्य अद्यतन विधि में:

shuttleAngle = (float) Math.Atan2(newGamePadState.ThumbSticks.Right.X, newGamePadState.ThumbSticks.Right.Y);

मेरी मुख्य ड्रा विधि में:

spriteBatch.Draw(shuttle, shuttleCoords, sourceRectangle, Color.White, shuttleAngle, origin, 1.0f, SpriteEffects.None, 1);

जैसा कि आप देख सकते हैं कि यह काफी सरल है, मैं अंगूठे से वर्तमान रेडियंस को लेता हूं और इसे एक फ्लोट में संग्रहीत करता हूं shuttleAngleऔर फिर शटल को खींचने के लिए रोटेशन कोण (रेडियन में) तर्क के रूप में इसका उपयोग करता हूं ।

किसी कारण से जब मैं स्प्रिंट को घुमाता हूं तो यह 0, 90, 180 और 270 डिग्री के कोण पर चिपचिपा महसूस होता है। यह उन कोणों पर बसना चाहता है। यह मुझे एक सहज और प्राकृतिक घुमाव नहीं दे रहा है, जैसे मैं एक ऐसे खेल में महसूस करता हूं जो एक समान मैकेनिक का उपयोग करता है। PS: मेरा Xbox नियंत्रक ठीक है!


1
क्या Atan2 पहले Y मान नहीं लेता है और फिर X मान? msdn.microsoft.com/en-us/library/system.math.atan2.aspx । आपको पहले अपना x और y मान स्वैप करना होगा। क्या आपने प्रक्षेप द्वारा अपने मूल्यों को आसान बनाने पर विचार किया है? -Value-currentValue / गति
14

क्षमा करें, मेरा मतलब था NewShuttleAngle - oldShuttleAngle / गति।
सिदार

यह केवल दृश्य अभिविन्यास को प्रभावित करेगा और यह पूरी तरह से इस बात पर निर्भर करता है कि बनावट के लिए छवि किस तरह से उन्मुख है - मैं नहीं देख सकता कि उसकी समस्या प्रभावित हुई।
जो शहनशाह

क्या यह विंडोज है? यदि ऐसा है तो प्रोजेक्ट को एक कंसोल विंडो (प्रोजेक्ट -> प्रोजेक्ट ऑप्शन्स -> एप्लीकेशन -> आउटपुट टाइप) का उपयोग करने के लिए सेट करें और अपने एंगल shuttleAngleको प्रिंट करके देखें कि क्या उन एंगल्स पर चिपक जाता है
जो शहन

2
वाह महान काम SomeWritesReserved और बाकी सब, मैं वास्तव में इस साइट से प्रभावित हूँ, प्रतिक्रिया इतनी तेज़ है! इसकी पहली पोस्ट तो क्या कोई मुझे बता सकता है कि मुझे उन सभी को ठीक से क्रेडिट करने के लिए क्या करने की ज़रूरत है जिन्होंने मदद की?
ह्यूग

जवाबों:


18

इसकी वजह यह हो सकती है कि गेमपैड की डेडज़ोन कैसे काम करती है। यह करने के लिए चूकGamePadDeadZone.IndependentAxes , जिसका अर्थ है कि प्रत्येक धुरी को व्यक्तिगत रूप से मृत क्षेत्र के खिलाफ जांचा जाता है। यह एनालॉग थम्बस्टिक के प्रत्येक अक्ष पर स्नैप करने के लिए इनपुट का कारण बनता है। इसके बजाय, उपयोग करने का प्रयास करें GamePadDeadZone.Circular:

newGamePadState = GamePad.GetState(playerIndex, GamePadDeadZone.Circular);

इससे आपको दोनों कुल्हाड़ियों पर अधिक चिकना नियंत्रण देना चाहिए। की जाँच करें MSDN पेज और शॉन हर्ग्रीव्स द्वारा इस लेख

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.