2012-02-21 24 views
5

फ्लैश ऑफ-स्टेज के तत्वों के साथ कैसे व्यवहार करता है?फ्लैश में ऑफ़-स्टेज डिस्प्ले ऑब्जेक्ट्स अभी भी मेरे गेम को धीमा कर रहे हैं?

जाहिर है फ्लैश वास्तव में उन्हें प्रस्तुत नहीं करता है (क्योंकि वे स्क्रीन पर कहीं भी दिखाई नहीं देते हैं), लेकिन उन्हें अभी भी मौजूद करने की प्रक्रिया है, जितना संभव होगा उतना ही होगा जितना कि तत्व थे- स्क्रीन?

या फ्लैश बुद्धिमानी से उन तत्वों को अनदेखा करता है जो एक प्रस्तुत करने योग्य क्षेत्र में नहीं आते हैं?

क्या मुझे मैन्युअल रूप से DisplayList से वस्तुओं को हटाने का प्रबंधन करना चाहिए और उन्हें बाहर निकलने के रूप में वापस जोड़ना और चरण दर्ज करना है, या यह अप्रासंगिक होने जा रहा है?

+1

आप एक साधारण परीक्षा लिख ​​सकते हैं। यद्यपि उन्हें प्रस्तुत नहीं किया जाता है, फिर भी वे पदानुक्रम में हैं और शायद एनिमेटिंग, स्क्रिप्ट निष्पादित करने और कई घटनाओं को प्रेषित करने जैसी कुछ ग़लत चीजें कर रहे हैं। –

+0

मुझे लगता है कि वस्तुओं का वास्तविक चित्र अधिकांश प्रदर्शन करता है - इसलिए जब वे ऑफ-स्टेज होते हैं तो समस्या नहीं होनी चाहिए। लेकिन जैसा कि वेलेंटीन ने कहा, जब वे अभी भी "स्क्रिप्ट निष्पादित कर रहे हैं और/या कई घटनाओं को प्रेषित कर रहे हैं" वे निश्चित रूप से पूरे गेम को धीमा कर रहे हैं। अगर वे मंच पर फिर से नहीं दिखाई देंगे, तो उन्हें नष्ट कर दें - यदि वे करेंगे, तो कोशिश करें और उन्हें तब तक रोक दें जब तक कि वे फिर से दिखाई न दें ... – pkyeck

+0

मैं मानता हूं कि आपको कुछ परीक्षण लिखना चाहिए, ऑब्जेक्ट्स का पूरा समूह प्राप्त करना चाहिए और उन्हें एनिमेट करना होगा स्क्रीन, फ्लैश बिल्डर प्रोफाइलर का उपयोग करके आप किसी भी बोतल गर्दन का पता लगाने में सक्षम होना चाहिए। मैं उन्हें स्क्रीन से बाहर जाने के साथ परीक्षण करता हूं, और स्क्रीन को छोड़ने के बाद RemoveChild() और दृश्य का परीक्षण भी करता हूं, हालांकि अल्फा 0 का उपयोग न करें। – Neil

उत्तर

2

हां, वे आपके गेम को धीमा कर रहे हैं।

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

हालांकि, मेरे अनुभव में, सर्वोत्तम अभ्यास, बिटमैप्स में वस्तुओं को चित्रित कर रहा है। बेशक यदि आप पहले से ही अपने गेम में बहुत गहरे हैं तो यह अप्रासंगिक हो सकता है, लेकिन यदि आपके पास निवेश करने का समय है, तो यह 2 डी गेम के बारे में एएस 3 से अधिक लाभ उठाने का सबसे अच्छा तरीका है। मुझे 8 बिट्रॉकेट http://www.8bitrocket.com/books/the-essential-guide-to-flash-games/ में बिटमैप्स और एएस 3 के बारे में कुछ बेहतरीन ट्यूटोरियल मिले, यदि आप चाहें तो विषय पर विस्तृत जानकारी दे सकते हैं, लेकिन मुझे लगता है कि मैं यहां विषय से बाहर जा रहा हूं।

+0

अच्छी पृष्ठभूमि - और बिटमैप्स के बारे में अच्छी सलाह; यह कुछ ऐसा है जो मैं अभी कुछ समय से कर रहा हूं। – Marty

0

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

सवाल उठता है, हमें मंच क्षेत्र के बाहर अप्रयुक्त वस्तुओं को रखने की आवश्यकता क्यों है? यदि आपको तेज लोडिंग के लिए मूवीक्लिप्स को 'कैश' करने की आवश्यकता है, तो उन्हें एक कीफ्रेम में लोड करें जहां नियंत्रण कभी नहीं जाएगा। उदाहरण के लिए। फ्रेम 1 में दिखाए जाने वाले डिस्प्ले ऑब्जेक्ट्स को लोड करें, फिर फ्रेम के क्रिया पैनल में एक स्टॉप() डालें, इसे एक महत्वपूर्ण फ्रेम बनाएं, और फ्रेम 2 में अप्रयुक्त एनिमेशन लोड करें। चूंकि फ्रेम 1 में एक स्टॉप() है, नियंत्रण फ्रेम 2 में कभी नहीं जाता है, लेकिन डिस्प्ले ऑब्जेक्ट कैश किए जाते हैं।

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