SKEase action,如何使用Float changing Action Setter Block?

SKEase action, how to use Float changing Action Setter Block?

在以下用例中,我尝试为 SKShapeNodelineWidth 设置动画。

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

其功能之一是浮动更改缓动操作,该操作似乎会随时间更改浮动值。

但是我不知道如何使用它。 Xcode 输入时给出以下建议:

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

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

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

但我完全不知道最后一部分是什么或如何使用,setterBlock 似乎期待一个函数接受一对与 activity 无关的参数。 XCode 此处不接受 SKShapeNodes 或 SKSpriteNodes,仅接受 SKNode,但我无法超越。


SKEase 的文档是这样描述的:

如果您键入 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 上的一个完整项目。