2016-10-27 36 views
2

在下面的用例中,我試圖對SKShapeNodelineWidth進行動畫處理。SKEase動作,如何使用Float改變動作設置塊?

SKEase是來自Craig Grummitt的github repo的精彩SpriteKitEasing的一部分。

其設施之一是浮動改變緩解行動,似乎隨着時間的推移改變浮動價值。

但是我不知道如何使用它。

let lineWeight = SKEase.createFloatTween(<start: CGFloat, end: CGFloat, time: TimeInterval, easingFunction: AHEasingFunction, setterBlock: ((SKNode, CGFloat) -> Void)) 

從這個庫中的其他SKEase行動,Xcode是輕鬆的類型非常有幫助,並幫助找出要輸入的內容:在Xcode中鍵入它時給出了以下建議。

有了這個,我不知道哪些選項可用於AHEasingFunctions ...我可以找到。

但我絕對不知道怎麼使用最後的部分,setterBlock看起來像是期待一個函數帶有一對與活動無關的參數。 XCode不會在這裏接受SKShapeNodes或SKSpriteNodes,而只是一個SKNode,但我無法超越。


下面是SKEase的文檔如何描述它:

enter image description here

回答

1

如果鍵入let fn = SKEase.getEaseFunction(,然後枚舉類型曲線型的一個點,緩解型,你會得到完成。

隨着SKNode SKShapeNode你必須施放。

下面是一些代碼:

let fn = SKEase.getEaseFunction(.curveTypeQuadratic, easeType: .easeTypeInOut) 
    let easeFat = SKEase.createFloatTween(2.5, end: 30.0, time: easeTime/2, easingFunction: fn) { (node: SKNode, param: CGFloat) in 
     let spinny = node as! SKShapeNode 
     spinny.lineWidth = param 
    } 
    let easeThin = SKEase.createFloatTween(30.0, end: 2.5, time: easeTime/2, easingFunction: fn) { (node: SKNode, param: CGFloat) in 
     let spinny = node as! SKShapeNode 
     spinny.lineWidth = param 
    } 

    if let spinnyNode = self.spinnyNode { 
     spinnyNode.lineWidth = 2.5 

     let rotate = SKAction.rotate(byAngle: CGFloat(M_PI) * CGFloat(2.0), duration: easeTime) 
     let easeFatThin = SKAction.sequence([easeFat, easeThin]) 
     let rotateAndEase = SKAction.group([rotate, easeFatThin]) 

     spinnyNode.run(SKAction.repeatForever(rotateAndEase)) 
     spinnyNode.run(SKAction.sequence([SKAction.wait(forDuration: easeTime), 
              SKAction.fadeOut(withDuration: easeTime), 
              SKAction.removeFromParent()])) 
    } 

而且我GitHub一個完整的項目。