SKEase动作,如何使用Float更改Action Setter Block?

时间:2016-10-27 12:33:31

标签: swift sprite-kit closures skaction easing

在以下用例中,我正在尝试为lineWidth的{​​{1}}设置动画。

SKEase是Craig Grummitt精彩的SpriteKitEasing github回购的一部分。

其中一个功能是浮动更改缓动操作,它似乎会随着时间的推移改变浮动值。

但我无法弄清楚如何使用它。在输入时,Xcode提供以下建议:

SKShapeNode

使用此库中的其他SKEase操作,Xcode非常有助于简化类型,并帮助确定要输入的内容。

有了这个,我不知道AHEasingFunctions有哪些选项......我可以找到它。

但我完全不知道使用最后一部分是什么或如何使用,setterBlock似乎期望一个函数采用与活动无关的一对参数。 XCode在这里不接受SKShapeNodes或SKSpriteNodes,只接受SKNode,但我不能超越它。

以下是SKEase的文档如何描述它:

enter image description here

1 个答案:

答案 0 :(得分: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上有一个完整的项目。