目前我正在使用Core Graphics作为形状,并使用CAShapeLayer和CABasicAnimation路径动画将形状转换为不同的形状.
但是由于游戏的复杂性,如果要介入SpritKit,使用SKShapeNode(丢弃CAShapeLayer并使用SKShapeNode),我能够将其平滑地设置为不同的形状吗?
我没有看到可以让你改变SKShapeNode路径的SKAction方法.
提前致谢.
解决方法
好.节日快乐.
最简单的方法是使用CALayerAnimation教授SKNode如何操作:
class ViewController: UIViewController { @IBOutlet weak var skview: SKView! var path1: CGPath! var path2: CGPath! override func viewDidLoad() { super.viewDidLoad() path1 = CGPath.init(rect: CGRect.init(x: 0,y: 0,width: 100,height: 100),transform: nil) path2 = CGPath.init(rect: CGRect.init(x: 0,width: 250,height: 400),transform: nil) } override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) let shapeLayer = CAShapeLayer() self.view.layer.addSublayer(shapeLayer) shapeLayer.fillColor = UIColor.clear.cgColor shapeLayer.path = path1 let anim = CABasicAnimation.init(keyPath: "path") anim.duration = 1.0 anim.fromValue = path1 anim.tovalue = path2 anim.isRemovedOnCompletion = false let shapeNode = SKShapeNode.init(path: path1) shapeNode.fillColor = UIColor.green skview.scene?.addChild(shapeNode) shapeLayer.add(anim,forKey: "prepanimation") shapeNode.run(SKAction.customAction(withDuration: anim.duration,actionBlock: { (node,timeDuration) in (node as! SKShapeNode).path = shapeLayer.presentation()?.path })) } }
如果路径太大,最佳方法是考虑将CABasicAnimation转换为CAKeyFrameAnimation方法.
从上面的过程中,您可以在设计时提取一对(time,presentation_Path).然后在运行期间在SKCustomAction中返回.请参考SKKeyframeSequence来获取想法(不完全相似但动画相似).
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。