2010-03-06 16 views
8

में एनीमेशन के लिए लीवरेजिंग कोर एनीमेशन Iphone पर मेरे ओपनजीएल दृश्य में कस्टम एनिमेशन चलाने के लिए कोर एनीमेशन का उपयोग करने में दिलचस्पी है। मैं एक ऐसी तंत्र ढूंढने की उम्मीद कर रहा था जिसने आपको एनएसओब्जेक्ट की कुंजीपैथ या प्रत्येक एनीमेशन टिक के लिए एक प्रतिनिधि विधि को सामान्य रूप से एनिमेट करने की अनुमति दी थी। मैंने जो किया है वह एक कैलियर की मनमानी संपत्ति को एनिमेट करना है और एनीमेशन की प्रगति को निर्धारित करने के लिए ओपनजीएल से उन्हें मतदान करना है। हालांकि, मुझे विश्वास है कि ऐसा करने का एक बेहतर तरीका है। इस महान एनीमेशन इंजन में टैप करने का सबसे साफ, सुरक्षित तरीका क्या है?ओपनजीएल

उत्तर

0

यदि आप स्वयं को एनिमेट करना चाहते हैं तो iPhone UIView Animation Best Practice पढ़ने का प्रयास करें। ओपनजीएल देखें के अंदर एनीमेशन के लिए एनिमेटेड मॉडल या कस्टम कोड का उपयोग करना बेहतर है लेकिन कोर एनीमेशन नहीं है।

+0

कोर एनीमेशन का उपयोग अप्रत्यक्ष रूप से करने के साथ क्या मामला है? मुझे स्क्रीन पर कोर एनीमेशन और ओपनजीएल मिश्रण के खिलाफ मजबूत सलाह के बारे में पता है, लेकिन क्या होगा यदि कैलियर को किसी दृश्य में कभी जोड़ा नहीं गया हो? –

+0

शायद मैं कुछ गलत समझ सकता हूं लेकिन यदि आप ओपनजीएल ईएस के साथ अपना दृश्य प्रस्तुत करते हैं तो कोर एनीमेशन का उपयोग करने की कोई आवश्यकता नहीं है। ऐप्पल द्वारा इस सरल उदाहरण को देखें: http://developer.apple.com/iphone/library/samplecode/GLES2Sample/index.html उनके पास बिना किसी कैलियर के UIView है। – Pavel

+1

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

0

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

यहां कुंजी है - (आईडी) प्रस्तुति लेयर और - (आईडी) मॉडललेयर शुद्ध/केवल ओपनजीएल का उपयोग करने के लिए; बेशक पदानुक्रम भी आपके ओपनजीएल दृश्य के लिए इस्तेमाल किया जा सकता है। लेकिन, प्रतिपादन के लिए कैलियर का उपयोग करने के साथ-साथ "मुफ्त में" भी अधिक हो जाता है, यदि यह आपके परिस्थितियों के लिए संभव है (लेकिन CATransformLayer भी देखें), यदि आप यही चाहते हैं! =)

3

मुझे संदेह है कि आप वास्तव में क्या चाहते हैं केवल कोर एनीमेशन द्वारा उपयोग किए जाने वाले आसान कार्यों हैं। थोड़ा गुगल के साथ खोजने के लिए ये काफी आसान हैं।

GLfloat bounceEaseOut(GLfloat ratio) { 
    if (ratio < 1.0f/2.75f) { 
     return 7.5625f*ratio*ratio; 
    } else if (ratio < 2.0f/2.75f) { 
     return 7.5625f*(ratio-=1.5f/2.75f)*ratio+0.75f; 
    } else if (ratio < 2.5f/2.75f) { 
     return 7.5625f*(ratio-=2.25f/2.75f)*ratio+0.9375f; 
    } else { 
     return 7.5625f*(ratio-=2.625f/2.75f)*ratio+0.984375f; 
    } 
} 

आप कितनी दूर अपने ट्वीन में आप (elapsedTime/tweenDuration) कर रहे हैं में गुजरती हैं और यह आपको बताता है ट्वीन के "समय" के माध्यम से रास्ते से क्या प्रतिशत आप होना चाहिए: यहाँ एक उदाहरण है।

1

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