सुरंग प्रभाव cocos2d


12

मैं COCOS2D (iOS) में एक समान सुरंग प्रभाव बनाने के लिए देख रहा हूं। क्या कोई किसी भी संकेत का सुझाव दे सकता है?

रेफ छवि

रेफ वीडियो १

रेफ वीडियो २

अब तक मैंने कई रिंग शेप स्प्रिट के साथ घटते पैमाने और एक ही बिंदु पर केंद्र को तैनात करने और Z को कम करने के साथ-साथ प्रत्येक छोटे स्प्राइट के लिए रखने की कोशिश की है।

इसके साथ, इसे CCScaleTo के साथ एनिमेट करना और साइज को 2.0 के साथ एनिमेशन की अवधि के साथ बदलना लेकिन यह संदर्भ में दिखाए गए टनल प्रभाव के पास वैसे भी नहीं आता है।

धन्यवाद, सैम

जवाबों:


10

मुझे इस आशय के लेखक से कार्यान्वयन विवरण मिला:

यह निश्चित रूप से 2 डी विमान में गहराई भ्रम बनाने के लिए बहुत काम था।

हालांकि सिद्धांत बहुत आसान है: स्केल 0. के साथ स्क्रीन के बीच में सर्कल शुरू होते हैं। फिर सुरंग का पहला सर्कल समय के साथ समय के साथ आनुपातिक रूप से स्केलिंग करना शुरू कर देता है (रैखिक स्केलिंग काम नहीं करती है) और कुछ समय बाद दूसरा सर्कल स्केल करना शुरू कर देता है , फिर 3rd, और 4th और इसी तरह।

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

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

मेरी अंग्रेजी के बारे में क्षमा करें, लेकिन मुझे उम्मीद है कि सामान्य विचार समझाया गया :)


1

आप Z मूल्य और पैमाने को कम करने के कई अंगूठी स्प्राइट होने के साथ लगभग वहाँ हैं। बस उन सबको केन्द्र में न रखें।

आपको उस बिंदु पर नज़र रखने की ज़रूरत है जहां आप सुरंग को दूर के घटना क्षितिज पर हिट करना चाहते हैं। आप समय के साथ उस बिंदु को चारों ओर ले जा सकते हैं।

फिर, जैसा कि आप प्रत्येक नए स्प्राइट को रखते हैं, इसे उस बिंदु पर रखें, इसे छोटा करें, सेट करें कि यह अस्पष्टता है कि आप कैसे पसंद करते हैं, फिर एक उदाहरण के CCSpawnसाथ शुरू करें CCScaleToऔर CCFadeTo:

sprite->runAction(CCSpawn::create(
    CCScaleTo::create(2.0f, 1.5f),
    CCFadeTo::create(5.0f, 255),
    nullptr));

सभी स्प्राइट्स को पहले से बनाएं और इसे कुशल रखने के लिए पीछे की तरफ घुमाएं।


1

मैं शायद इसे एक पृष्ठभूमि परत और कण पुतलों के साथ क्रमबद्ध करने की कोशिश करूंगा। आप कण डिजाइनर में प्रभावों का परीक्षण कर सकते हैं और उन्हें बाद में बैकग्रॉन्ग परत में खेल सकते हैं।


0

सच कहूं तो मुझे नहीं लगता कि एक 2 डी कैमरे का उपयोग करके छवि प्रदान की गई है। ऐसा लगता है कि गेम को 3D रेंडरिंग सिस्टम का उपयोग करके प्रस्तुत किया गया है। लेकिन जब से आप cocos2d का उपयोग करना चाहते हैं, तो आपको उस 3 डी ट्रांस्मिशन मैट्रिक्स को स्वयं अनुकरण करना होगा। यहां एक विचार शुरू करना है: आप एक 3D दृश्य में जानते हैं, प्रत्येक वस्तु को 3 स्केलर मान, x, y और z द्वारा परिभाषित किया जाता है। सबसे सरल तरीका जो आप उपयोग कर सकते हैं, जैसा कि आपने सुझाव दिया है, वैसे ही स्केलिंग है, लेकिन जैसा आपने लागू किया था वैसा नहीं है! ccScaleToसमय के साथ एक रेखीय स्केलिंग का परिणाम होगा, जो 3 डी का उत्पादन नहीं करेगा। आप मान के द्वारा स्केलिंग ऑब्जेक्ट से शुरू कर सकते हैं 1/z। यह किसी भी तरह के सबसे सरल प्रक्षेपण मैट्रिक्स के समान है जिसके बारे में आप सोच सकते हैं! यदि आपको ऐसा लगता है कि आप संतुष्ट नहीं हैं, तो अधिक आधुनिक और अधिक जटिल प्रोजेक्शन मैट्रिसेस पर एक नज़र डालें ।

साइड नोट: cocos2D में कस्टम प्रोजेक्शन मैट्रिक्स को लागू करना थोड़ा गंदा होगा। यदि आपको वास्तव में प्रभाव पसंद नहीं है, तो मैं दृढ़ता से आपके इंजन को 3D समर्थन के साथ बदलने का सुझाव देता हूं।


मैं चीजों को और अधिक जटिल बनाने के लिए 3 डी का परिचय नहीं देना चाहता हूं लेकिन यह प्रभाव नकली सुरंग दृश्य प्रदान करने के लिए cocos2d में बनाया गया है (कुछ समय पहले इस खेल के लेखक के साथ मेरी बातचीत हुई थी)
सौरभ पासोलिया

0

यहाँ मैंने इसे कैसे किया, छद्म कोड में

सुरंग-प्रभाव सक्रिय करें:

  1. CCRepeatForever (CCFunc (createCircle)) बनाएँ
  2. "ViewNode" नामक अपने दृश्य में एक नोड जोड़ें

createCircle ()

  1. सीन के बीच में लेयर, पोशन बनाएं। इसे बच्चे के रूप में "ViewNode" में जोड़ें।
  2. रन एक्शन: CCSequence (CCEaseExponentialIn (CCScaleTo), CCRemoveSelf)
  3. अपनी परत में सामान रखें, यानी साइकल, दुश्मन, अंतरिक्ष यान, जो भी हो।

नियंत्रण (लंबन के साथ)

  1. सुरंग-प्रभाव वाली सभी परतों के लिए (अर्थात ViewNode के बच्चे)
  2. स्पर्श स्थिति के आधार पर एंकर स्थिति को अपडेट करें।

स्थिति वैनिशिंग पॉइंट है, इसलिए, आप वैनिशिंग बिंदु को स्थानांतरित किए बिना परतों को स्थानांतरित नहीं कर सकते। हालाँकि, अगर आप एंकर पॉइंट को हिलाते हैं, तो लेयर हिलने लगती है, लेकिन वैनिशिंग पॉइंट वही रहता है - यह एक लंबन प्रभाव बनाता है, क्योंकि एक क्लोज़ लेयर (बड़े पैमाने पर) पर ccp (0.2,0.2) बढ़ने से अधिक प्रभाव पड़ता है दूर की परत पर समान ले जाना।

आप एक ही आकार की परतों में सब कुछ लपेटते हैं, यह सुनिश्चित करने के लिए कि लंगर को स्थान देना सभी परतों में एक ही आंदोलन बनाता है।

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