2016-10-27 34 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一个完整的项目。