我正在制作一个游戏,我希望 Sprite 节点按照圆周运动,并且随着时间的推移,圆圈半径应该逐渐减小到零。我假设,这可以通过使用 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
}
如何引用创建的每个路径并减小它们的大小?
最佳答案
我认为最好的方法是创建一条路径并使项目像您提到的那样遵循该路径,
所以你可以让粒子遵循如下路径
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
}
希望对您有所帮助。
关于ios - 在 SpriteKit 中随着时间的推移减小 CGPath 的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31376783/