2 डी प्लेटफ़ॉर्मर में "टाइम कंट्रोल"


9

मैं एक 2 डी प्लेटफ़ॉर्मर बना रहा हूं, जहां खिलाड़ी एक बटन दबा सकता है, और स्तर को फिर से शुरू कर सकता है, केवल उनका पिछला चरित्र भी उसी समय स्तर को चलाएगा, जैसे वे समय में वापस यात्रा कर रहे हैं।

मुझे पता है कि अन्य खेलों ने पहले भी ऐसा किया है, और जिस तरह से मैंने ऐसा करने के बारे में सोचा है वह है खेल चरित्र बनाने के लिए क्रियाओं का एक सेट है (आइडल, जंपिंग, वॉकिंग लेफ्ट आदि) और फिर उन कार्यों में परिवर्तन का पता लगाएं और उन्हें लॉग इन करें। खेल समय के साथ एक सूची। तो तब जब मुझे चरित्र को फिर से अपने स्तर पर चलाने की आवश्यकता होती है, मैं सही समय पर अपने कार्यों को बदलते हुए सूची के माध्यम से जा सकता हूं।

क्या यह करने का सबसे अच्छा तरीका है? क्या किसी को इसमें कोई अनुभव है?

धन्यवाद।


आप जिस चीज की तलाश कर रहे हैं, वह समय के नियंत्रण से अधिक 'रीप्ले' है। इससे निपटने के तरीकों पर आपको कुछ अच्छे लेख मिल सकते हैं, लेकिन मैं अभी भी कहता हूं कि इस क्षेत्र में नीचे दिया गया उत्तर भी एक अच्छी शुरुआत है। ध्यान रखें कि खेल में जो चीजें that रैंडम ’होती हैं, वे that घोस्ट’ कैरेक्टर के लिए रीप्ले को फिर से चलाएंगी, अगर वे प्रगति को प्रभावित कर सकते हैं।
जेम्स

3
"यादृच्छिक" भागों के बारे में अच्छी बात है। एक यादृच्छिक जनरेटर का उपयोग करना सुनिश्चित करें जो एक बीज के आधार पर इसकी संख्या उत्पन्न करता है। फिर अपने रिप्ले के साथ बीज को बचाएं और उस रिप्ले को खेलते समय उसी बीज का उपयोग करें।
बंमज़ैक

आपने यह कैसे किया? आपका वर्कअराउंड क्या है?

जवाबों:


8

संपादित करें:

कृपया इस प्रश्न का उत्तर @ Bluescrn देखें; वह आंदोलन वैक्टर या स्थिति के बजाय नियंत्रण फिर से खेलना में कमजोरियों पर विस्तार से बताता है।

-

आप सही रास्ते पर हैं। यहाँ मैं दृष्टिकोण का उपयोग करेंगे:

नियंत्रकों

एक नियंत्रक वर्ग बनाएं जो कीबोर्ड इनपुट प्राप्त करता है और इसे आपके चरित्र पर भेजता है। हालांकि, महत्वपूर्ण कुंजी (जैसे तीर, कूद, आदि) दबाए जाने पर और जब वे जारी किए गए थे, तो वास्तव में एक नियंत्रक रिकॉर्ड भी होता है। यह इस तरह की जानकारी को संग्रहीत करेगा:

actions[0].milliseconds = 400     actions[0].action = right pressed
actions[1].milliseconds = 1000    actions[1].action = jump pressed
actions[2].milliseconds = 1300    actions[2].action = jump released
actions[3].milliseconds = 2500    actions[3].action = jump pressed
actions[4].milliseconds = 3000    actions[4].action = jump released
actions[5].milliseconds = 5330    actions[5].action = right released

एक नियंत्रक के दो तरीके हैं:

  1. रिकॉर्ड: कीबोर्ड इनपुट प्राप्त करता है। सूची में रिकॉर्ड इनपुट। कीबोर्ड राज्य पर आधारित चरित्र इनपुट को हाथ देता है।
  2. रीप्ले: कीबोर्ड इनपुट को अनदेखा करता है। स्तर के शुरू होने के बाद से मिली सूची के अनुसार सूची के माध्यम से अग्रिम। वर्तमान समय में रिकॉर्ड की गई कीबोर्ड स्थिति के आधार पर वर्ण इनपुट को हाथ में रखें।

पात्र

जब आपके कैरेक्टर ऑब्जेक्ट का निर्माण किया जाता है, तो यह अपने लिए एक नया नियंत्रक बनाता है। चरित्र किसी भी समय दो में से एक मोड में हो सकता है:

  1. सक्रिय: केवल एक ही सक्रिय चरित्र है और यह वह है जिसे आप नियंत्रित करते हैं। जब कैरेक्टर एक्टिव मोड में होता है, तो उसका कंट्रोलर रिकॉर्ड मोड में होता है। डिफ़ॉल्ट रूप से जब एक चरित्र का निर्माण किया जाता है तो वह सक्रिय मोड में होता है।
  2. भूत: यह वह है जो आपके पिछले कार्यों को दोहराता है। जब कोई वर्ण घोस्ट मोड में प्रवेश करता है, तो वह अपनी उपस्थिति बदल देता है और अपने नियंत्रक को रिप्ले मोड में सेट करता है।

स्तर

एक नए सिरे से शुरू किया गया स्तर

जब आप स्तर शुरू करते हैं, तो एक एकल चरित्र बनाएं। अब स्तर शुरू होता है और खिलाड़ी अपनी बात करता है।

जब समय रहता है

जब स्तर रीसेट करता है, तो तीन काम करें:

  1. भूत मोड में प्रवेश करने के लिए वर्तमान सक्रिय चरित्र बताओ।
  2. एक नया चरित्र बनाएँ।
  3. सभी वर्णों को स्वयं रीसेट करने के लिए कॉल करें। यह उन्हें बिना किसी हलचल के साथ शुरुआती स्थिति में वापस ले जाएगा, आदि वे अपने नियंत्रक को मिलिसेकंड 0 पर रीसेट करने के लिए कहेंगे जिसमें कोई कुंजी दबाए नहीं है।

फिर स्तर शुरू होता है और खिलाड़ी अपनी बात करता है।


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

8

यदि आप रिकॉर्ड किए गए इनपुटों को फिर से देख रहे हैं, तो दुनिया में किसी भी चलती / विनाशकारी / संवादात्मक वस्तुओं के निहितार्थों पर विचार करें, जो कार्रवाई फिर से शुरू होने पर स्थानांतरित या बदल गई हो सकती है।

इसके अलावा, यदि आपका गेम एक वैरिएबल टाइमस्टेप का उपयोग करता है, तो पुनरावृत्ति इनपुट ठीक काम नहीं करेगा। आप एक निश्चित-टाइमस्टेप गेम अपडेट (चर फ्रैमरेट रेंडरिंग के लिए प्रक्षेप के साथ) पर विचार करना चाह सकते हैं?


1
+10 अगर मैं कर सका। महान विचार। वांछित प्रभाव के आधार पर, पुनरावर्ती वैक्टर या स्थिति पुनरावृत्ति इनपुट के लिए बेहतर होगी। तख्ते के बीच अशुद्धि के दसियों सेकंड संभवतः इनपुट के साथ आंदोलन और स्थिति के साथ काम करते समय खाते में आसान होते हैं।
doppelgreener


0

कीबोर्ड इनपुट रिकॉर्ड करना आपके मामले में उपयोगी नहीं हो सकता है। आप एक समयरेखा के साथ एक तख़्ता उत्पन्न कर सकते हैं। तुम भी समय फिर से कर सकते हैं अगर आपके बलों के साथ मुश्किल है कि आप को लागू करने की जरूरत है

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