मेरे स्प्राइट के आंदोलन में एक्सट्रपलेशन लगाने से पहले, मेरी टक्कर पूरी तरह से काम करती थी। हालांकि, मेरे स्प्राइट के आंदोलन (चीजों को सुचारू करने के लिए) पर एक्सट्रपलेशन लगाने के बाद, टकराव अब काम नहीं करता है।
यह है कि चीजों को एक्सट्रपलेशन से पहले कैसे काम किया जाता है:
हालाँकि, मैं अपना एक्सट्रपलेशन लागू करने के बाद, टकराव की दिनचर्या टूट जाती है। मैं यह मान रहा हूं क्योंकि यह नए समन्वय पर काम कर रहा है जो एक्सट्रपलेशन रुटीन (जो मेरे रेंडर कॉल में स्थित है) द्वारा निर्मित किया गया है।
मैं अपना एक्सट्रपलेशन लागू करने के बाद
इस व्यवहार को कैसे सुधारा जाए?
मैंने एक्सट्रपलेशन के ठीक बाद एक अतिरिक्त टक्कर की जांच करने की कोशिश की है - यह बहुत सारी समस्याओं को स्पष्ट करता है लेकिन मैंने इसे खारिज कर दिया है क्योंकि मेरे प्रतिपादन में तर्क देना सवाल से बाहर है।
मैंने स्प्राइट्सएक्स पोज़िशन की एक कॉपी बनाने की कोशिश की है, जो कि एक्सट्राप्रोलेटिंग और ड्राइंग का उपयोग करता है जो मूल के बजाय, इस प्रकार तर्क को चुनने के लिए मूल बरकरार छोड़ देता है - यह एक बेहतर विकल्प लगता है, लेकिन यह अभी भी कुछ अजीब प्रभाव पैदा करता है दीवारों से टकराने पर। मुझे पूरा यकीन है कि यह भी इससे निपटने का सही तरीका नहीं है।
मैं यहाँ पर इसी तरह के सवालों के एक जोड़े को मिला है, लेकिन जवाब मुझे मदद नहीं की है।
यह मेरा एक्सट्रपलेशन कोड है:
public void onDrawFrame(GL10 gl) {
//Set/Re-set loop back to 0 to start counting again
loops=0;
while(System.currentTimeMillis() > nextGameTick && loops < maxFrameskip){
SceneManager.getInstance().getCurrentScene().updateLogic();
nextGameTick+=skipTicks;
timeCorrection += (1000d/ticksPerSecond) % 1;
nextGameTick+=timeCorrection;
timeCorrection %=1;
loops++;
tics++;
}
extrapolation = (float)(System.currentTimeMillis() + skipTicks - nextGameTick) / (float)skipTicks;
render(extrapolation);
}
एक्सट्रपलेशन लागू करना
render(float extrapolation){
//This example shows extrapolation for X axis only. Y position (spriteScreenY is assumed to be valid)
extrapolatedPosX = spriteGridX+(SpriteXVelocity*dt)*extrapolation;
spriteScreenPosX = extrapolationPosX * screenWidth;
drawSprite(spriteScreenX, spriteScreenY);
}
संपादित करें
जैसा कि मैंने ऊपर उल्लेख किया है, मैंने स्प्राइट के निर्देशांक की एक प्रति बनाने की कोशिश की है, विशेष रूप से इसके साथ आकर्षित करने के लिए .... इसकी अपनी समस्याएं हैं।
सबसे पहले, नकल की परवाह किए बिना, जब स्प्राइट बढ़ रहा है, तो यह सुपर-चिकनी है, जब यह बंद हो जाता है, तो यह थोड़ा बाएं / दाएं लड़खड़ा रहा है - क्योंकि यह अभी भी एक्सट्रपॉलेटिंग है यह समय के आधार पर स्थिति है। क्या यह सामान्य व्यवहार है और स्प्राइट के रुकने पर क्या हम इसे बंद कर सकते हैं?
मैंने बाएं / दाएं के लिए झंडे लगाने की कोशिश की है और यदि इनमें से कोई भी सक्षम है तो केवल एक्सट्रपलेटिंग। मैंने यह देखने के लिए कि क्या कोई अंतर है, यह देखने के लिए अंतिम और वर्तमान स्थितियों को कॉपी करने की कोशिश की है। हालाँकि, जहाँ तक टक्कर होती है, ये मदद नहीं करते हैं।
यदि उपयोगकर्ता कह रहा है कि दायाँ बटन और स्प्राइट सही चल रहा है, जब वह दीवार से टकराता है, यदि उपयोगकर्ता दाहिने बटन को दबाए रखता है, तो स्प्राइट दीवार से रोके जाने के दौरान दाईं ओर स्थित रहेगा; इसलिए वास्तव में नहीं चल रहा है), हालांकि, क्योंकि सही ध्वज अभी भी सेट है और इसलिए भी क्योंकि टक्कर की दिनचर्या दीवार से लगातार स्प्राइट को स्थानांतरित कर रही है, यह अभी भी कोड (खिलाड़ी नहीं) को दिखाई देता है कि स्प्राइट अभी भी चल रहा है, और इसलिए एक्सट्रपलेशन जारी है। तो खिलाड़ी क्या देखेगा, स्प्राइट 'स्टेटिक' है (हाँ, यह एनिमेट कर रहा है, लेकिन यह वास्तव में स्क्रीन के पार नहीं जा रहा है), और हर अब और फिर यह हिंसक रूप से हिलता है क्योंकि एक्सट्रपलेशन यह करने की कोशिश करता है ..... .. उममीद है कि इससे मदद मिलेगी