टाइल-आधारित आइसोमेट्रिक गेम में मुफ्त आवाजाही


9

क्या टाइल-आधारित आइसोमेट्रिक गेम में मुफ्त आवाजाही को लागू करने का एक उचित आसान तरीका है? इसका मतलब है कि खिलाड़ी तुरंत एक टाइल से दूसरे में कूद नहीं पाएगा या ग्रिड के लिए "स्नैप" नहीं किया जाएगा (उदाहरण के लिए, अगर टाइल के बीच का आंदोलन एनिमेटेड था, लेकिन एनीमेशन खत्म होने से पहले आपको कुछ भी करने से रोक दिया जाएगा)। मैं वास्तव में गेम प्रोग्रामिंग से संबंधित किसी भी चीज के साथ शुरुआत कर रहा हूं, लेकिन इस साइट और कुछ अन्य संसाधनों की मदद से मूल सामान को करना काफी आसान था, लेकिन मैं इस विशेष समस्या के लिए कोई उपयोगी संसाधन नहीं खोज पाया हूं ।

वर्तमान में मैंने इसके करीब कुछ सुधार किया है: http://jsfiddle.net/KwW5b/4/ (WASD आंदोलन)। आंदोलन के लिए विचार माउस मैप का उपयोग करने के लिए यह पता लगाने के लिए किया गया था कि खिलाड़ी एक अलग टाइल में स्थानांतरित हो गया है और फिर ऑफसेट को फ्लिप करता है, और अधिकांश भाग के लिए यह सही ढंग से काम करता है (प्रत्येक कोने खिलाड़ी को गलत स्थान पर ले जाता है: http: //www.youtube.com/watch?v=0xr15IaOhrI , जो शायद इसलिए है क्योंकि मुझे पूर्ण माउस मैप ठीक से काम नहीं मिल सका), लेकिन मुझे कोई भ्रम नहीं है कि यह एक अच्छे / समझदार समाधान के करीब है। और वैसे भी, यह ज्यादातर यह प्रदर्शित करने के लिए है कि मैं किस तरह की चीज को लागू करना चाहता हूं।


यह कोड बहुत अच्छा लग रहा है, वास्तव में समस्या क्या है? आप बहुत मामूली हैं (एक अच्छे तरीके से) आपका कोड अच्छा लग रहा है, डेमो में क्या सुविधा गायब है?
अट्टुरसम्स

कोने की समस्याओं से मेरा मतलब इस तरह का व्यवहार था: youtube.com/watch?v=0xr15IaOhrI । मैं समस्याग्रस्त ऑफ़सेट्स के लिए बहुत सारे इफ़-चेक बनाने के अलावा किसी अन्य समाधान के साथ आने में सक्षम नहीं हूं, और फिर भी कुछ विशेष मामले हैं जहां खिलाड़ी एक गलत स्थान पर जाता है। लेकिन जैसा मैंने कहा, मैं सोच रहा था कि इस तरह के आंदोलन को आमतौर पर कैसे लागू किया जाता है क्योंकि मैंने उस पद्धति को नहीं देखा है जिसका उपयोग मैं कहीं और करता था।
xtr486

जवाबों:


10

सबसे पहले मैं सुझाव देता हूं कि आप दिशाओं को बदलते हैं: डब्ल्यू - अप-लेफ्ट एस - डाउन-राइट ए - डाउन-लेफ्ट डी - टॉप-राइट

अधिक सहज ज्ञान युक्त: डब्ल्यू - अप एस - डाउन ए - लेफ्ट डी - राइट

आपकी चिंता के लिए, मेरा सुझाव है कि आप दो कार्य करते हैं, एक आइसोमेट्रिक टाइल का निर्देशन ग्रिड निर्देशांक में करता है, और दूसरा दूसरे तरीके से। इस तरह आप बस MVC को अलग कर सकते हैं और यह सक्रिय टाइल की गणना करते समय आपके जीवन को आसान बना देगा: यहाँ छवि विवरण दर्ज करें


1
आपका उत्तर वास्तव में आशाजनक लगता है, लेकिन मैं इसे बहुत मानता हूँ बस मेरे सिर पर चला जाता है। हालाँकि, मैं अगले कुछ दिनों के दौरान आपके समाधान को पचाने का प्रयास करता रहूँगा। क्या यह कहीं भी है जो आप के बाद थे? jsfiddle.net/Sd4ZP/18 इसमें कुछ लॉजिक एरर्स (एक के बाद एक) और जैसे हैं, लेकिन जहां तक ​​मुझे पता है कि टॉप-डाउन और आइसोमेट्रिक मैप्स में एक ही मूवमेंट है। मैंने जो कुछ भी नहीं देखा है वह यह है कि टाइल को ऊपर-नीचे से आइसोमेट्रिक में कैसे अनुवाद किया जाए ..
xtr486

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

मुझे समस्या दिखाई देती है: आप कैनवास ड्राइंग एपीआई का उपयोग करने के बजाय चित्र डालकर izometric दृश्य खींच रहे हैं। यह काफी तार्किक है, क्योंकि अंत में आपकी इज़ो टाइलें एक ठोस रंग के साथ बहुत अधिक होंगी। हालाँकि, डिबगिंग के लिए आपको टाइल्स के बीच की रेखाएँ भी खींचनी चाहिए, इससे आपका जीवन बहुत आसान हो जाएगा। वैसे भी, मैंने आपके कोड को फोर्क कर दिया है और पोजिशनटाउज़र (x, y) ट्रांसलेटिंग फंक्शन बनाया है। एक टाइल पर काले वर्ग को केन्द्रित करके इसका परीक्षण करें (क्योंकि आईएसओ दृश्य में यह हमेशा केंद्रित होता है), और नीचे कैनवास पर मूविंग माउस - एक अनुवादित डॉट को izo कैनवास पर दिखाया जाएगा: jsfiddle.net/tZTXS/1
Markon वॉन Broady

धन्यवाद! मैं वास्तव में कुछ (जैसे की) खुद को अलग करने में कामयाब रहा, अर्थात् ड्रॉमीट्रिक समारोह में आइसोमेट्रिक ऑफसेट। अब यह इस तरह दिख रहा है: jsfiddle.net/P2eKF/4 , जो मूल प्रश्न में मैंने जो पूछा था, वही करता है, इसलिए मैं आपके उत्तर को चिह्नित करूंगा। :)
xtr486

मुझे खुशी है कि आपने यह किया है! मुझे पसंद है कि कैसे डब्ल्यूए, डब्ल्यूडी, एएस, एसडी कुंजी के कोम्बिनेशन ने 45 डिग्री के कोण के बजाय आइसोमेट्रिक कुल्हाड़ियों को आंदोलन संरेखित किया है। अच्छा कार्य।
मार्कस वॉन ब्रॉडी

0

अगर मैं समझता हूं, तो आप चाहते हैं कि खिलाड़ी टाइल से टाइल तक ले जाए, लेकिन बिना कूद के। आप ऐसा कर सकते हैं:

1- टाइल टी 0 और ऑफसेट 0 से शुरू करें

2- जब खिलाड़ी टाइल टी 1 सेट ऑफसेट = - (t1 - t0) पर जाता है

3- खिलाड़ी अपडेट में, यदि ऑफ़सेट 0 नहीं है, तो अपडेट समय और खिलाड़ी की गति का उपयोग करते हुए गिरावट।

amount = deltatime * playerSpeed
deltaoff = sqrt(offsetX*offsetX + offsetY*offsetY)
total = min( amount, deltaoff )
offsetX = offsetX - (total * offsetX / deltaoff)
offsetY = offsetY - (total * offsetY / deltaoff)

4- यो टाइल पर कब खिलाड़ी है यह जानने के लिए ऑफसेट == 0 चेक का उपयोग कर सकते हैं।

इसके साथ आपको एक खिलाड़ी मिलता है जो नक्शे में मुफ्त चलता है लेकिन टाइल्स से चिपका रहता है।

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