2014-07-08 4 views
8

ऐसा लगता है कि सिस्टम एक अलग स्क्रीन कैप्चर लेता है जिसे मेरा ऐप applicationWillResignActive पर ले जाता है।आईओएस मल्टीटास्किंग स्विचर सिस्टम छवि बनाम एप्लिकेशन छवि विसंगति वर्कअराउंड

मेरे आश्चर्य करने के लिए छवि के बीच लगभग 0.6 सेकेंड प्रणाली द्वारा उठाए का विलंब है (ख) और छवि से खेल (घ) लिया। अगर सिस्टम को applicationWillResignActive से पहले स्क्रीन कैप्चर करने की आवश्यकता है, तो यह प्रकार की तरह बनाता है, लेकिन तेजी से चलती वस्तुओं वाले गेम के लिए इसे आसानी से प्लेयर द्वारा देखा जा सकता है।

मैं इसे कैसे काम कर सकता हूं?

निम्न चरणों के खिलाड़ी बनाता है और यह कैसे ऐसी विसंगति का कारण बनता है:

enter image description here

(क) खिलाड़ी होम बटन जब वह खेल रहा है दालों। (बी) सिस्टम स्क्रीन कैप्चर लिया जाता है। (सी) खिलाड़ी गेम आइकन को टैप करता है। (डी) खेल applicationWillResignActive पर लिया गया स्क्रीन कैप्चर के साथ लॉन्च किया गया है। (ई) खेल को तेजी से चलती वस्तु में विसंगति दिखाते हुए रोका गया है।

+1

आपने अपना गेम कब रोक दिया? आप '_save स्नैपशॉटविथनाम' पर ब्रेकपॉइंट डाल सकते हैं और देखें कि इसे कब कहा जाता है। –

+0

@LeoNatan खेल को एप्लिकेशन पर रोक दिया गया है WillResignActive हालांकि स्क्रीनशॉट एप्लिकेशन में लिया गया हैडिएन्टरबैकग्राउंड, मैंने एप्लिकेशन पर स्क्रीनशॉट लेने का परीक्षण किया है, लेकिन परिणाम – rraallvv

+0

है यदि गेम 'एप्लिकेशनविल्लरसिग्नाएक्टिव' में रुक गया है, तो 'applicationDidEnterBackground' में लिया गया स्क्रीनशॉट सटीक होना चाहिए। शायद आपकी समस्या वापस लौटने पर है। –

उत्तर

0

मेरा मानना ​​है कि ऐसा इसलिए है क्योंकि आपका गेम प्रतिपादन मुख्य धागे पर नहीं है (निश्चित रूप से यह मुख्य धागे पर नहीं होना चाहिए), इसलिए जब applicationDidEnterBackground/applicationWillResignActive वापस कर दिया जाता है, तो सिस्टम तुरंत वीडियो कार्ड के बफर से स्क्रीन शॉट लेता है।

इस समय, आपका गेम लूप थ्रेड अभी भी चल रहा है, इसलिए यह रोके जाने से पहले कुछ फ्रेम अपडेट कर सकता है।

मैं कैसे आप अपने खेल पाश को लागू नहीं पता है, लेकिन आप इस कोशिश कर सकते हैं: अपने खेल पाश में

applicationDidEnterBackground/applicationWillResignActive में, एक वैश्विक सेमाफोर (dispatch_semaphore_t) रख दिया और ब्लॉक मुख्य थ्रेड,, सेमाफोर का निरीक्षण और यदि यह मौजूद है, तो अपने गेम लूप को रोकें, फिर सेमफोर को सिग्नल करें।

यह आश्वस्त करेगा कि आपके गेम को रोके जाने के बाद स्क्रीन शॉट लिया जाता है।

यह भी ध्यान दें कि applicationWillResignActive के बाद, सिस्टम कार्य स्विचर के लिए स्नैपशॉट लेगा, और applicationDidEnterBackground के बाद, अगली बार जब आप ऐप फोरग्राउंड में प्रवेश करेंगे तो सिस्टम स्नैपशॉट लेगा।

आशा है कि यह आपकी मदद करेगा।

संबंधित मुद्दे