2015-07-13 58 views
0

我正在做一个游戏,我想让一个精灵节点跟随一个圆形运动,随着时间的推移,圆的半径应该逐渐减小到零。我假设,这可以通过使用CGPath()创建循环路径,然后每次调用update()函数时将路径半径减少1个点来完成。在SpriteKit中随着时间减少CGPath的大小?

下面是代码:

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

你是否试图创建一个螺旋呢?在这种情况下,看看http://stackoverflow.com/questions/30427482/moving-a-skspritenode-in-a-downward-loop-using-swift – ABakerSmith

回答

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 
    } 

希望它能帮助。

+0

这听起来像它的作品。让我在尝试后的几个小时内更新你。不过谢谢您的回答。 – Mehul

+0

你也可以键入你的函数decreaseOrbit()的实现吗? – Mehul

+0

我已经添加了decreaseOrbit()函数,但您可以编辑原点参数或减小尺寸(在我的示例中为5.0)。 – mert