2013-02-25 12 views
10

हम एक ऐसे गेम को विकसित कर रहे हैं जिसमें ओपनजीएल ईएस व्यू पर विशेष रूप से UIViews के साथ 2 डी तत्व प्रदर्शित होते हैं (विशेष रूप से, हम जीएलकिट के GLKView का उपयोग कर रहे हैं) और स्थिति को पूरी तरह सिंक में रखने में समस्याएं आ रही हैं।ओपनजीएल फ्रेम को UIView लेआउट को सिंक्रनाइज़ करें

पैरेंट व्यू के layoutSubviews में, हम स्क्रीन पर दुनिया में 3 डी पदों का प्रक्षेपण कर रहे हैं, और गेम में कई UIView "मार्कर" के लिए स्थानों के रूप में उपयोग कर रहे हैं। पूरा गेम केवल कैमरे को ले जाने वाले उपयोगकर्ता के जवाब में अपडेट होता है, और कैमरा प्रत्येक बार चलने पर setNeedsLayout दृश्य को बताता है।

सब कुछ ठीक काम कर रहा है, सिवाय इसके कि मार्कर 3 डी प्रतिपादन के साथ सिंक्रनाइज़ेशन के लगभग 1 फ्रेम लगते हैं। मैं मोटे तौर पर कहता हूं क्योंकि (1) यह अनुमान है! और (2) मैं सोच रहा हूं कि संभावित रूप से एक मल्टीथ्रेडिंग समस्या है: GLKView एक विशेष स्क्रीन रीफ्रेश कॉलबैक या कुछ सिंक करने के लिए सिंक नहीं है?

क्या दृश्य के लेआउट को जोड़ने का कोई तरीका है सबव्यूव्स ताकि यह 3 डी व्यू अपडेट को सिंक कर सके?

अद्यतन: अजीब तरह से, तुरंत setNeedsLayout के बाद layoutIfNeeded बुला समस्या बदतर बनाता है! संभवतः 2 या अधिक फ्रेम बाहर। वास्तव में यह समझ में नहीं आता!

उत्तर

0

लेआउटसब्यूव्यूज़ पर आपका कॉल ट्रिगर कर रहा है क्या?

यह सब इस बात पर निर्भर करता है कि रनलूप में आपकी कॉल ट्रिगर हो गई है जहां आपका जीएलके अपडेट कॉल ट्रिगर किया गया है।

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

(यदि आप ओपनजीएल का उपयोग कर रहे हैं, तो संपूर्ण "लेआउट" सिस्टम आपके लिए अधिक उपयोग नहीं है: जीएलके परिवर्तनीय फ्रेम दर की अपनी छोटी दुनिया में चल रहा है, और आप इसे अपना संदर्भ बिंदु बनाना चाहते हैं)

0

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

मैं UIView से परिचित नहीं हूं, लेकिन अगर ऑडियो चलाने और फ्रेम को बनावट में कॉपी करने का कोई तरीका है, तो ऐसा करें। ऑडियो में अंतराल को क्षतिपूर्ति करना और वीडियो की तुलना में मनुष्यों द्वारा बहुत कम ध्यान देने योग्य है।

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