在SpriteKit中随着时间减少CGPath的大小?

时间:2015-07-13 06:35:22

标签: ios swift sprite-kit

我正在制作一个游戏,其中我希望精灵节点遵循圆周运动,并且随着时间的推移,圆半径应逐渐减小到零。我假设,这可以通过使用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
}

如何引用每个创建的路径并缩小其大小?

1 个答案:

答案 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
   }

希望它有所帮助。