我正在制作一个游戏,其中我希望精灵节点遵循圆周运动,并且随着时间的推移,圆半径应逐渐减小到零。我假设,这可以通过使用CGPath()创建一个循环路径来完成,然后每次调用update()函数时将路径半径减少1个点。
以下是代码:
func createOrbit() -> (CGPath) {
let orbitPathOrigin = CGPoint(x: center.x , y: center.y)
let orbitPathRect = CGRect(origin: orbitPathOrigin, size: orbitSize)
let orbitPath = CGPathCreateWithEllipseInRect(orbitPathRect, nil)
return orbitPath
}
如何引用每个创建的路径并缩小其大小?
答案 0 :(得分:1)
我认为最好的方法是创建一个路径并使项目遵循您提到的那条路径,
所以你可以让粒子跟随下面的路径
var mySatellite = SKSpriteNode(color: UIColor.redColor(), size: CGSize(width: 10, height: 10))
var spinAction = SKAction.followPath(self.createOrbit(), asOffset: false, orientToPath: true, duration: 4.0)
mySatellite.runAction(spinAction)
在didMoveToView
方法或类似方法的某处设置时间操作
var wait = SKAction.waitForDuration(4.0)
var play = SKAction.runBlock { () -> Void in
var newPath = self.decreasedOrbit(20.0)
var spinAction = SKAction.followPath(newPath, asOffset: false, orientToPath: true, duration: 4.0)
}
var waitAndPlaySeq = SKAction.sequence([wait,play])
mySatellite.runAction(waitAndPlaySeq)
AssignNewOrbit函数为粒子指定新路径。
decreasedOrbit
功能如下,仅用于创建新的小轨道。
此外,您还需要减少每个时期的轨道大小
func decreasedOrbit(diameter : CGFloat) -> CGPath{
var newDiameter = CGFloat(diameter - 5.0)
var squareRect = CGRect(origin: CGPoint(x: 0, y: 0), size: CGSize(width: newDiameter, height: newDiameter))
var bezierPath = UIBezierPath(ovalInRect: squareRect)
return bezierPath.CGPath
}
希望它有所帮助。