我想要的效果就像是水滴落在水面上,波浪从中心点向外辐射。
我创建了一个圆形:
let initialRadius = 4.0
let myPath: CGMutablePathRef = CGPathCreateMutable()
CGPathAddArc(myPath, nil, 0, 0, initialRadius, 0, M_PI * 2, true)
let myCircle = SKShapeNode()
myCircle.path = myPath
myCircle.position = CGPoint(x: xPos, y: yPos)
myCircle.lineWidth = 0.5
myCircle.antialiased = false
myCircle.fillColor = SKColor.orangeColor() // background is orange
myCircle.strokeColor = SKColor.whiteColor()
myCircle.physicsBody = SKPhysicsBody(edgeLoopFromPath: myPath)
然后我让 Sprite 展开并淡出:
let duration: NSTimeInterval = 1.7
let fade = SKAction.fadeOutWithDuration(duration)
let scale = SKAction.scaleTo(9.0, duration: duration)
fade.timingMode = .EaseOut
scale.timingMode = .EaseOut
myCircle.runAction(fade)
myCircle.runAction(scale)
这很接近,但是当圆的尺寸正确扩大时,线宽也在扩大。你能想出一种方法来做到这一点,同时保持线宽不变吗?
最佳答案
您可以使用 customActionWithDuration
以增加半径(和恒定线宽)重新绘制路径,而不是使用 scale
。像这样的东西:
// ... All as before, except...
// myCircle.runAction(scale)
typealias ActionBlock = ((SKNode!, CGFloat) -> Void)
let ab: ActionBlock = { (node, value) in
if let drop = node as? SKShapeNode {
let myPath: CGMutablePathRef = CGPathCreateMutable()
CGPathAddArc(myPath, nil, 0, 0, initialRadius * (1.0 + value * 9.0 / duration) , 0, M_PI * 2, true)
drop.path = myPath
}
}
let newScale = SKAction.customActionWithDuration(duration, actionBlock: ab)
myCircle.runAction(newScale)
关于ios - 固定轮廓宽度的扩展圆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24868450/