टाइल आधारित 2 डी प्लेटफ़ॉर्मर में 45 ° ढलान


12

मैं अपने टाइल आधारित प्लेटफ़ॉर्मर में सरल 45 ° ढलान रखना चाहता हूं, हालांकि मैं एल्गोरिथ्म को नीचे लाने के लिए बस नहीं कर सकता हूं। कृपया कोड और वीडियो पर एक नज़र डालें, शायद मुझे स्पष्ट याद आ रही है?

//collisionRectangle is the collision rectangle of the player with 
//origin at the top left and width and height
//wantedPosition is the new position the player will be set to.
//this is determined elsewhere by checking the bottom center point of the players rect
if(_leftSlope || _rightSlope)
{        
    //Test bottom center point
    var calculationPoint = new Vector2(collisionRectangle.Center.X, collisionRectangle.Bottom);
    //Get the collision rectangle of the tile, origin is top-left
    Rectangle cellRect =
        _tileMap.CellWorldRectangle(
            _tileMap.GetCellByPixel(calculationPoint));
    //Calculate the new Y coordinate depending on if its a left or right slope
    //CellSize = 8
    float newY = _leftSlope
                            ? (calculationPoint.X % CellSize) + cellRect.Y
                            : (-1 * (calculationPoint.X % CellSize) - CellSize) + cellRect.Y;
    //reset variables so we dont jump in here next frame
    _leftSlope = false;
    _rightSlope = false;
    //now change the players Y according to the difference of our calculation
    wantedPosition.Y += newY - calculationPoint.Y;
}

यह कैसा दिखता है, इसका वीडियो: http://youtu.be/EKOWgD2muoc


1
वैक्टर कमाल नहीं हैं? : डी
गुस्तावो मैकिएल

जवाबों:


10

जो मैं आपके प्रश्न को पढ़कर समझ रहा हूं, आप खिलाड़ी की स्थिति को Yदेखते हुए सही स्थिति की गणना करना चाहते हैं X। यह बल्कि तुच्छ है। इस छवि को देखें:

ढाल

मान लें कि आपकी ढलान-टाइल किसी दिए गए स्थान पर है x,y(मूल नीचे की ओर छवि के रूप में छोड़ दिया गया है)। आपके पास खिलाड़ी की स्थिति x1और चौड़ाई और ढलान वाली टाइल की ऊंचाई ( u, v) है। x, yऔर x1दुनिया के निर्देशांक हैं।

इन मापदंडों को देखते हुए, आपके खिलाड़ी Y- स्थिति ( y1) होंगे:

y1 = y + (x1 - x) * (v / u)

यदि आप केवल 45 डिग्री कोण के साथ काम कर रहे हैं, तो यह और भी सरल हो जाता है:

y1 = y + (x1 - x)

यदि ढलान दूसरा रास्ता गोल है, तो यह है:

y1 = y + (v - (x1 - x))

@SkimFlux फिक्स के बाद अपने नए फॉर्मूलर प्लस और कुछ बेवकूफी भरी बातों को लागू करने के बाद मैंने इसे अनदेखा कर दिया। धन्यवाद।
xNidhogg

क्या आप एक सरल गणना के लिए y = mx + b का उपयोग नहीं कर सकते थे?
ashes999

@ ashes999 मुझे नहीं लगता कि जितना मैंने लिखा है, उससे कहीं ज्यादा सरल है। आपकी गणना में क्या हैं mऔर क्या हैं b?
बंमज़ैक

@ बम्ज़ैक मी आपकी ढलान है (नीचे की ओर 45 डिग्री ढलान के लिए 1, ऊपर की ओर -1) और बी एक्स-अक्ष पर अवरोधन होगा। ग्रेड 9 बीजगणित। मैं तो बस कह रहा हूं'।
ashes999

@ ashes999 हाँ, यह एक लंबा समय रहा है। इस समीकरण को उत्तर के रूप में पोस्ट करने के लिए स्वतंत्र महसूस करें।
बंमज़ैक

8

यद्यपि यह पहले से ही उत्तर दिया गया है, मुझे एक और समीकरण प्रदान करने की अनुमति देता है: y = mx + bजहां y की गणना की जाती है, m ढलान (45 डिग्री पर नीचे के लिए -1, 45 डिग्री पर 1 के लिए नीचे) है, और बी y- अवरोधन है - - y- निर्देशांक जहाँ x = 0 है।

यह आपको थोड़ा अधिक लचीलापन देता है; आप 45-डिग्री के अलावा किसी अन्य ढलान की गणना करने के लिए मीटर बदल सकते हैं। उदाहरण के लिए, पी / 3 का एक एम आपको 30 डिग्री का ढलान देता है।


4

आप इस साइट में बहुत अधिक मूल्य पा सकते हैं: http://info.sonicretro.org/Sonic_Physics_Guide

विशेष रूप से आप जो देख रहे हैं उसके लिए ठोस टाइलें: ढलान और घटता अनुभाग देखें। यह मूल रूप से आपको दिखाता है कि यह कैसे माना जाता है कि यह शुरुआती सोनिक खेलों में पूरा किया गया था।


दिलचस्प पढ़ा, लेकिन बहुत जटिल है। इस तरह की ढलान केवल एक ही है जो मैं चाहता हूं, इस प्रकार समाधान को सरल करना चाहिए। इसके लिए एक ऊंचाई का नक्शा / सेंसर / स्कैनर सिस्टम ओवरकिल होगा। हालांकि इस लिंक को खोदने के लिए धन्यवाद।
xNidhogg

2

आप सेपरेट एक्सिस थेर्म में देखना चाहते हैं, यह आपके ढलान के मुद्दे को हल करेगा, लेकिन इसके लिए काफी गणित की आवश्यकता होती है और सिद्धांत को आपके सिर को गोल करने में थोड़ा समय लगता है। मैंने आपको एक ट्यूटोरियल और एक पुस्तक से जोड़ा है जो इसे बेहतर तरीके से समझाता है

metanetsoftware ट्यूटोरियल

वास्तविक समय-टकराव-डिटेक्शन


बहुत अधिक, imo। यह एक अत्यधिक सरलीकृत मामला है और सैट के अन्य उपयोगों की कोई आवश्यकता नहीं होगी। लिंक खींचने के लिए समय निकालने के लिए धन्यवाद, यद्यपि।
xNidhogg

2

मुझे लगता है कि या तो आपके पास कहीं और एक त्रुटि है, या आप सही समय पर _leftSlope / _rightSlope झंडे सेट नहीं कर रहे हैं। यह कोड X आंदोलन को बिल्कुल भी नहीं छूता है, लेकिन यह वीडियो में आपकी समस्या प्रतीत होती है।

आपको जांचना चाहिए कि क्या उन झंडे को ट्रिगर किया गया है। फिर अपने क्षैतिज टकराव का पता लगाएं: आप इसे ढलान पर ट्रिगर नहीं करना चाहते हैं।


हे भगवान ठीक है। जब ऐसा होता है तो मैं वास्तव में क्षैतिज या ऊर्ध्वाधर टक्कर का पता नहीं लगाना चाहता। मैं पूरी तरह से अक्षम करने के लिए भूल गया। अब किसी तरह बेहतर लग रहा है, लेकिन अभी तक नहीं किया गया। धन्यवाद।
xNidhogg
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.