फ़्लैश गेम्स के लिए प्रदर्शन का प्रतिपादन


11

मैं SO पर देसी फ्लैश रेंडरिंग बनाम कस्टम BitmapDataफ्रेम बफर बनाने के बारे में पढ़ रहा था और कुछ जवाब थोड़े विवादित थे, इसलिए मैं सोच रहा था:

  1. क्या आमतौर पर कस्टम बिटमैप बफर रूट पर जाना सबसे अच्छा अभ्यास है या फ्लैश इंजन को रेंडरिंग छोड़ना सबसे अच्छा है?
  2. यदि आप MovieClipस्प्राइट्स के विपरीत वेक्टर एनिमेशन ( एस) का उपयोग कर रहे हैं , तो क्या यह ऊपर दिए गए उत्तर को बदल देता है?
  3. यदि ऐसा है तो स्प्राइट आधारित एनिमेशन का उपयोग करना सबसे अच्छा अभ्यास है?

(अगर कोई फर्क पड़ता है तो मैं फ्लैश 10 को लक्षित कर रहा हूं)

जवाबों:


14

1. कोई सामान्य सर्वोत्तम अभ्यास नहीं है।

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

  • आप गुणवत्ता के नुकसान के बिना स्वतंत्र रूप से अपनी संपत्ति को माप सकते हैं या दृश्य में ज़ूम कर सकते हैं।
  • घुमाव या अन्य परिवर्तन जैसे कि तिरछा करना वेक्टर ग्राफिक्स पर प्रदर्शन करना बहुत आसान होगा

इसलिए निष्कर्ष में, यह उबलता है कि आप किस तरह के खेल का निर्माण कर रहे हैं।

2. बिटमैप स्प्राइट-शीट के बजाय मूवी क्लिप्स का उपयोग करना

मुझे लगता है कि आपका मतलब "बिटमैप स्प्राइट-शीट" है न कि एएस 3 स्प्राइट क्लास?

इससे वास्तव में फर्क नहीं पड़ता। आप हमेशा अपने मूवीक्लिप आधारित एनिमेशन को एनिमेटेड बिटमैप में बदल सकते हैं। या तो मैन्युअल रूप से, मूवी को फ्रेम में निर्यात करके और उन्हें एक स्प्राइट-शीट में बदल दें , या गतिशील रूप से, रनटाइम पर अपनी मूवीक्लिप से स्प्राइट शीट प्रदान करके। यहां बताया गया है कि मैं यह कैसे करूंगा:

  1. MovieClip और stop()इसे का एक उदाहरण बनाएँ ।
  2. new BitmapDataMovieclip के समान चौड़ाई और ऊंचाई के साथ एक ऑब्जेक्ट बनाएं ।
  3. ड्राट () विधि का प्रयोग करें , मूवीक्लिप को बिटमैपडेटा में रेंडर करने के लिए।
  4. BitmapData ऑब्जेक्ट को किसी ऐरे या वेक्टर में स्टोर करें।
  5. अपने मूवीक्लिप के अगले फ्रेम पर जाएं और स्टेप 2 - 4 को दोहराएं, ऐसा तब तक करें जब तक आप अपने मूवीक्लिप के आखिरी फ्रेम तक नहीं पहुंच जाते। अपने MovieClip फ्रेम की अधिकतम चौड़ाई और अधिकतम ऊंचाई के साथ दो चर को अपडेट करना भी एक अच्छा विचार है (क्योंकि ये फ्रेम से फ्रेम में बदल सकते हैं)।
  6. अब आप एक स्प्राइट-शीट में सभी संग्रहीत BitmapData वस्तुओं को जोड़ सकते हैं (उपयोग BitmapData.copyPixels () )

3. स्प्राइट-आधारित एनिमेशन

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


जब (यदि?) फ्लैश अपने प्रतिपादन के लिए हार्डवेयर त्वरण का उपयोग करना शुरू कर देता है, तो एक copyPixel रेंडरर संभवतः देशी रेंडरर की तुलना में धीमा हो जाएगा।
बार्ट वैन ह्युकेलोम

6

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

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

बिल्ट इन फ्लैश एनीमेशन मैकेनिज्म के साथ जाना वेक्टर आधारित गेम्स के लिए सबसे अच्छा काम करता है क्योंकि आप आसानी से मूवी क्लीप के रूप में अपनी लाइब्रेरी एसेट बना सकते हैं जिसे आप डिमांड पर एक्शनस्क्रिप्ट में इंस्टेंट कर सकते हैं। आप एनीमेशन को संभालने और तदनुसार स्प्राइट के स्थान को स्थानांतरित करने के लिए फिल्म क्लिप प्रदान की गई समयरेखा का उपयोग करते हैं। सभी बैटलऑन! एडवेंचर क्वेस्ट वर्ल्ड जैसे गेम इस पद्धति का उपयोग करते हैं। यह अच्छा भी लगता है।

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


3

भले ही यह आमतौर पर माना जाता है कि ब्लिटिंग तेज है, मैंने किसी भी बेंचमार्क को साबित नहीं किया है। कुछ डेवलपर्स सिर्फ इसलिए ब्लिटिंग करना पसंद करते हैं क्योंकि यह उन्हें फ्लैश को जेनेरिक वर्चुअल मशीन के रूप में व्यवहार करने की अनुमति देता है, और स्वयं को नियंत्रित करने की अनुमति देता है। हालाँकि, यदि आप बिल्ट-इन डिस्प्ले लिस्ट (जो मैं करते हैं) पसंद करते हैं, तो फ़्लैश हाई-स्क्रीन डिस्प्लेऑब्जेक्ट्स (जैसे मूवीक्लिप्स, स्प्राइट्स, बिटमैप्स) को हाई रेट रेट पर अच्छे से इफेक्ट कर सकता है, स्केल कर सकता है और घुमा सकता है। जब तक वे आयामों में काफी छोटे होते हैं, उदाहरण के लिए प्रत्येक 200x200 पिक्सेल से कम। आप vectors का उपयोग किए बिना MovieClips का उपयोग कर सकते हैं। अधिकांश गेम बिटमैप परिसंपत्तियों का उपयोग करेंगे जो भी वे उपयोग करते हैं। लेकिन यह कभी-कभी लेआउट के लिए उपयोगी होता है और समयरेखा पर बिटमैप परिसंपत्तियों को एनिमेट करता है, खासकर यदि आप पिक्सेल कलाकार के बजाय फ्लैश-विशेषज्ञ डिजाइनर के साथ काम कर रहे हैं। LOW को स्टेज क्वालिटी सेट करने से आपको बदसूरत ट्रांसफॉर्मेशन की कीमत पर बेहतर प्रदर्शन मिलेगा। फ्लैश किसी भी ऑब्जेक्ट को ऑफ स्क्रीन रेंडर नहीं करेगा, इसलिए वे आपको धीमा नहीं करते हैं।

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


जटिल वेक्टर आकृतियों का प्रदर्शन पर भी महत्वपूर्ण प्रभाव पड़ सकता है। यदि आपको बहुत सारे ग्रेडिएंट्स के साथ एनिमेटेड मूवीक्लिप्स मिले हैं, और यदि आप अपने वेक्टर-शेप्स के विस्तार के स्तर पर ध्यान नहीं देते हैं, तो यह बिटमैप की तुलना में बहुत धीमा हो जाएगा।
बंमज़ैक

आप vectors का उपयोग किए बिना MovieClips का उपयोग कर सकते हैं। अधिकांश गेम बिटमैप परिसंपत्तियों का उपयोग करेंगे जो भी वे उपयोग करते हैं। लेकिन यह कभी-कभी लेआउट के लिए उपयोगी होता है और समयरेखा पर बिटमैप परिसंपत्तियों को एनिमेट करता है, खासकर यदि आप पिक्सेल कलाकार के बजाय फ्लैश-विशेषज्ञ डिजाइनर के साथ काम कर रहे हैं।
इयान

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

कुछ रेंडरिंग और अपडेट बेंचमार्क: 8bitrocket.com/2007/12/23/…
Max Dohme
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.