2017-09-01 11 views
6

मैं आईओएस 11 (ARKit के लिए) और साथ काम कर रहा हूँ, जबकि एक नमूना एक फॉक्स के साथ एप्पल से SceneKit के लिए एप्लिकेशन के लिए कई बिंदु, मैं विस्तार यह है कि नमूना परियोजना (file) एनिमेशन जोड़ने के लिए का उपयोग करता है के साथ समस्या हो रही है:एनीमेशन के लिए वैकल्पिक (केके :) (अब बहिष्कृत)?

extension CAAnimation { 
    class func animationWithSceneNamed(_ name: String) -> CAAnimation? { 
     var animation: CAAnimation? 
     if let scene = SCNScene(named: name) { 
      scene.rootNode.enumerateChildNodes({ (child, stop) in 
       if child.animationKeys.count > 0 { 
        animation = child.animation(forKey: child.animationKeys.first!) 
        stop.initialize(to: true) 
       } 
      }) 
     } 
     return animation 
    } 
} 

ऐसा लगता है कि यह एक्सटेंशन बहुत आसान है लेकिन मुझे यकीन नहीं है कि अब इसे कैसे माइग्रेट किया जाए? क्या यह डिफ़ॉल्ट रूप से SceneKit में बनाया गया है?

प्रलेखन वास्तव में कारण है कि यह पदावनत किया गया था या जहां यहां से जाने के लिए पर ज्यादा जानकारी नहीं दिखा।

धन्यवाद

उत्तर

6

टी एल; डॉ: कैसे नए API का उपयोग करने के लिए के उदाहरण एप्पल के sample game (SCNAnimationPlayer के लिए खोज)


भी animation(forKey:) हालांकि इसकी सम्बन्धी तरीकों के साथ काम में पाया जा सकता CAAnimation को iOS11 में बहिष्कृत किया गया है, आप उनका उपयोग जारी रख सकते हैं - सब कुछ काम करेगा।

लेकिन यदि आप नए एपीआई का उपयोग करना चाहते हैं और पिछली संगतता की परवाह नहीं करते हैं (जिसे आपको ARKit के मामले में किसी भी तरह की आवश्यकता नहीं है, क्योंकि यह केवल iOS11 के बाद उपलब्ध है), पढ़ें।

नव SCNAnimationPlayer शुरू की अपने पूर्ववर्तियों की तुलना में एक अधिक सुविधाजनक एपीआई प्रदान करता है। वास्तविक समय में एनिमेशन के साथ काम करना अब आसान है। This videoWWDC2017 से इसके बारे में जानने के लिए एक अच्छा प्रारंभिक बिंदु होगा।

एक त्वरित सारांश के रूप में: SCNAnimationPlayer आप मक्खी पर एनीमेशन की गति को बदलने के लिए अनुमति देता है। यह CAAnimation एस जोड़ने और निकालने की तुलना में play() और stop() जैसी विधियों का उपयोग करके एनीमेशन प्लेबैक के लिए एक अधिक सहज इंटरफ़ेस प्रदान करता है। आप दो एनिमेशन को एक साथ मिश्रित कर सकते हैं, उदाहरण के लिए, उनके बीच चिकनी संक्रमण करने के लिए उपयोग किया जा सकता है।

आप कैसे Fox 2 game by Apple में इस सब का उपयोग करने के उदाहरण मिल सकते हैं। इस प्रकार

extension SCNAnimationPlayer { 
    class func loadAnimation(fromSceneNamed sceneName: String) -> SCNAnimationPlayer { 
     let scene = SCNScene(named: sceneName)! 
     // find top level animation 
     var animationPlayer: SCNAnimationPlayer! = nil 
     scene.rootNode.enumerateChildNodes { (child, stop) in 
      if !child.animationKeys.isEmpty { 
       animationPlayer = child.animationPlayer(forKey: child.animationKeys[0]) 
       stop.pointee = true 
      } 
     } 
     return animationPlayer 
    } 
} 

आप इसे उपयोग कर सकते हैं:


यहाँ विस्तार द्वारा पोस्ट की गई SCNAnimationPlayer (जो आप फॉक्स 2 नमूना परियोजना में Character कक्षा में प्राप्त कर सकते हैं) का उपयोग करने के लिए अनुकूलित है

  1. लोड एनीमेशन और इसी नोड

    के लिए इसे जोड़ने
  2. इसका उपयोग करें!

    model.animationPlayer(forKey: "jump")?.play() 
    
+0

अच्छा, धन्यवाद उन संसाधनों की जाँच करेंगे :)। –

+1

इसके लिए बहुत धन्यवाद।मैंने आपके लिंक का पालन किया है और ठीक उसी तरह किया है, मेरे CAAnimation कोड को SCNAnimationPlayer के साथ बदल रहा है लेकिन मैं इसे अपने जीवन के लिए खेलने के लिए नहीं मिल सकता। जाल एनीमेशन के पहले फ्रेम पर कूदता है, इसलिए मुझे पता है कि यह इसे लोड कर रहा है। मैं एनीमेशन लॉग कर सकता हूं और फ्रेम की सही संख्या देख सकता हूं, लेकिन प्ले() कुछ भी नहीं करता है। CAAnimation का उपयोग कर एक ही एनीमेशन ठीक काम करता है। मैं कुछ भी परीक्षण कर सकते हैं? –

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