मैं वर्तमान में एंड्रॉइड के लिए एक गेम विकसित कर रहा हूं, और मैं आपकी विशेषज्ञता को उस मुद्दे पर चाहूंगा जो मेरे पास है।एंड्रॉइड गेम डेवलपमेंट: टकराव का पता लगाना
पृष्ठभूमि:
मेरे खेल फ्रेम दर स्वतंत्र गति है, जो खाता आवश्यक वेग गणना प्रदर्शन से पहले डेल्टा समय मूल्य में ले जाता है को शामिल किया गया।
यह गेम एक पारंपरिक 2 डी प्लेटफार्म है।
मुद्दा:
यहाँ मेरी मुद्दा (सरलीकृत) है। आइए दिखाएं कि मेरा चरित्र एक मंच के शीर्ष पर एक वर्ग खड़ा है ("गुरुत्वाकर्षण" चरित्र VelocityDown की निरंतर नीचे की गति के साथ)।
मैं टक्कर पता लगाने इस प्रकार है (Y अक्ष अंक नीचे की ओर कल्पना करते हुए) को परिभाषित किया है:
को देखते हुए characterFootY मेरी वर्ग चरित्र के आधार की y- निर्देशांक है, platformSurfaceY ऊपरी y है मेरे मंच के -coordinate, और platformBaseY मेरे मंच के निचले y- निर्देशांक है:
if (characterFootY + characterVelocityDown > platformSurfaceY && characterFootY + characterDy < platformBaseY) {
//Collision Is True
characterFootY = platformSurfaceY;
characterVelocityDown = 0;
} else{
characterVelocityDown = deltaTime * 6;
यह दृष्टिकोण पी काम करता है जब खेल नियमित गति से चल रहा है तो ठीक से ठीक है; लेकिन, अगर खेल को धीमा कर देती, deltaTime (जो पिछले फ्रेम और वर्तमान फ्रेम के बीच लगे समय है) बड़ा हो जाता है, और characterFootY + characterVelocityDown सीमाओं कि टक्कर का पता लगाने और चरित्र को परिभाषित बस गिर जाता है से अधिक सीधे माध्यम से (जैसे टेलीपोर्टिंग)।
इसे रोकने के लिए मैं इस मुद्दे से कैसे संपर्क करूँ?
आपकी मदद के लिए अग्रिम धन्यवाद और मैं आपसे सीखने की उम्मीद कर रहा हूं!
अगर किसी और को यह समस्या हो रही है, तो इसका एक संभावित समाधान डेल्टाटाइम मान को कैप करना है ताकि जब यह एक निश्चित मूल्य से अधिक हो, तो आप इसे टोपी के बराबर सेट कर दें। यह गेमस्पेड असंगत बना देगा, लेकिन ज्यादातर मामलों में ठीक होना चाहिए। – SeveN
क्या आपके पास पहले और बाद में डेल्टा मूल्य हैं, क्योंकि तुलना वहां की जा सकती है? – cjk