मैं विंडोज़ फोन 7 के लिए अपने एक्सएनए कोड के ड्रॉइंग भाग में एक प्रदर्शन समस्या खोज रहा हूं जो कभी-कभी कुछ सेकंड के बाद होता है। क्या कोई सर्वोत्तम अभ्यास है कि स्प्राइटबैच को कॉल करने के लिए कब/कब कॉल करें। कुछ खींचने के लिए बेगिन? इसे प्रत्येक स्प्राइट्स के लिए बुलाया जाना चाहिए (प्रत्येक वर्ग में जब यह खिलाड़ी, पृष्ठभूमि, पृष्ठभूमि ऑब्जेक्ट्स ... ...) खींचता है या शुरुआत में कॉलिंग करेगा -> सभी सबक्लास में सबकुछ खींचें - प्रदर्शन के लिए बेहतर हो?SpriteBatch.Begin() /। End() को कितनी बार कॉल करना है?
उत्तर
आपको उन्हें आवश्यक से अधिक उपयोग नहीं करना चाहिए, क्योंकि शुरुआत() का अर्थ स्प्राइट प्रतिपादन और अंत() के लिए डिवाइस तैयार करना है, जिसका अर्थ है पिछली स्थिति में बहाल करना। यह शुरुआत में कुछ झंडे के माध्यम से भिन्न हो सकता है() कह रहा है कि आप कोई राज्य परिवर्तन नहीं चाहते हैं, और आपके कोड को जटिल कर सकते हैं क्योंकि आपको कुछ राज्य मैन्युअल रूप से सेट करना होगा।
डिवाइस स्थिति में परिवर्तन अक्सर धीमे होते हैं और यदि आवश्यक हो तो आपको उन्हें रोकने से रोकना चाहिए, वे आपके द्वारा किए जा रहे कुछ भी हस्तक्षेप कर सकते हैं, इसलिए यदि आप स्प्राइटबैच में कुछ नहीं देना चाहते हैं तो आपको एंड() को कॉल करना चाहिए, लेकिन अगर आप sprites प्रतिपादन कर रहे हैं आप सभी sprites के लिए इसे एक बार कॉल करना चाहिए।
पिछले स्प्राइट पर दिखाई देने वाले राज्यों को संशोधित करने के लिए एंड() को कॉल करने से रोकने के लिए, आपको एंड() के बजाय फ्लश() को कॉल करना चाहिए। यह वर्तमान परिवर्तन और डिवाइस राज्यों के साथ कतारबद्ध sprites प्रस्तुत करता है, लेकिन राज्यों को बरकरार छोड़ देता है। फ्लैश() को कॉल करने के लिए एंड() फ़ंक्शन क्या होता है और आरंभ() द्वारा निर्धारित विशिष्ट राज्यों को रीसेट करना है।
प्रदर्शन की तरह सबसे अच्छी बात यह है कि प्रति ड्रा() में केवल एक बार कॉल/अंत को कॉल करना है, इससे एक ही समय में ग्राफिक्स कार्ड द्वारा संसाधित होने के लिए बैच में सभी स्प्राइट्स का कारण बनता है। यदि आपको आवश्यकता हो तो आपको केवल एकाधिक स्प्राइट बैचों का उपयोग करना चाहिए। जब आप की जरूरत हो सकती के उदाहरण हैं:
- आप केवल कुछ स्प्राइट के लिए एक प्रभाव लागू करना चाहते हैं, लेकिन दूसरों को नहीं
- आप स्क्रीनशॉट
- तुम कुछ प्रभाव के साथ और अधिक जटिल क्या करना चाहते ले जाना चाहते हैं
क्या कोई भी एकाधिक स्प्राइट बैचों (प्रारंभ-> अंत) के लिए किसी अन्य कारण के बारे में सोच सकता है?
- 1. मुझे डेटाबेस कनेक्शन को कितनी बार बंद करना चाहिए?
- 2. नेस्टिंग ShapeRenderer.begin/SpriteBatch.begin/अंत
- 3. मुझे सी ++ एप्लिकेशन में कितनी बार srand() को कॉल करना चाहिए?
- 4. आप कितनी बार SQL सीई डेटाबेस को कॉम्पैक्ट करना चाहिए?
- 5. टीसीपी कितनी बार
- 6. संकलक संकलित - कितनी बार?
- 7. गेटटर को कई बार कॉल करना या एक बार कॉल करना और एक चर को असाइन करना?
- 8. LoggerFactory.getLogger (...) को क्यों कॉल करना हर बार अनुशंसित नहीं है?
- 9. PagerAdapter में GetCount को कितनी बार बुलाया जाता है?
- 10. कार्यक्रम कितनी बार चलाया गया है? सी #
- 11. xhr.upload.on प्रगति आग कितनी बार करता है?
- 12. एपीएनएस प्रतिक्रिया कितनी बार जांचें?
- 13. HttpContext.Current कॉल के पीछे कितनी गणना है?
- 14. आपको सॉफ़्टवेयर अपडेट कितनी बार रिलीज़ करना चाहिए?
- 15. हमें कितनी बार एप्लिकेशन पूल रीसायकल करना चाहिए?
- 16. NSUserDefaults कितनी बार सिंक्रनाइज़ होते हैं?
- 17. रेल में प्रारंभिक कितनी बार दौड़ते हैं?
- 18. कई बार एक परीक्षण को कॉल करना - Google टेस्ट
- 19. क्या अंतिम बार से आरसीडब्ल्यू कॉल करना सुरक्षित है?
- 20. मुझे कोर डेटा को कितनी बार सहेजना चाहिए?
- 21. UITableView startUpdates/end कॉलबैक अपडेट करता है
- 22. फ़ंक्शन को कितनी बार बुलाया गया था, एफपी तरीका
- 23. मैं GC_CONCURRENT को कितनी बार चल रहा हूं?
- 24. मुझे एंटिटी मैनेजर कितनी बार बनाना चाहिए?
- 25. ओरेकल डेटाबेस आंकड़े कितनी बार चलाना चाहिए?
- 26. मैटलैब: क्या एक ही मैप फ़ंक्शन को बार-बार लूप से कॉल करना बहुत अधिक ओवरहेड होता है?
- 27. तालिका का विश्लेषण, तालिका अनुकूलित, कितनी बार?
- 28. कितनी बार एक स्ट्रिंग एक और स्ट्रिंग
- 29. कितनी बार एक स्ट्रिंग एक और
- 30. ब्लॉक को कितनी बार बुलाया जाता है, मैं कैसे सीमित करूं?
शुरुआत के लिए ओवरलोड की सूची यहां है: http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.graphics.spritebatch.begin.aspx यदि आप यहां कुछ भी अलग करना चाहते हैं, तो एक कस्टम प्रभाव या एक अलग ट्रांसफॉर्म मैट्रिक्स में गुजरने के रूप में, आपको एक और कॉल करना होगा। –
हाय, मैं एक विशिष्ट स्प्राइट पर छवि का स्क्रीनशॉट नहीं ले पा रहा हूं लेकिन एक अलग स्प्राइट पर स्क्रीनशॉट लेने में सक्षम था। कोई विचार, यह क्यों हो सकता है? – nagavamsikrishna
@salsabear, यह एक नए प्रश्न के लिए सामग्री की तरह लगता है। यदि आप प्रश्न में कोड शामिल करते हैं, तो केवल प्रतिधारण भाग शामिल करना सुनिश्चित करें। –