我正在尝试"脉冲" SK / SWIFT中的精灵。我的尝试是粗略的使用For循环和.setScale
,但他们没有工作(没有错误 - 只是没有动画)。我觉得使用SKActions可能会更优雅。
在使用下面的帮助后,这是我当前的实现。但是,它出现了编译错误;
类型名称&之后的预期成员名称或构造函数调用 一行上的连续声明必须用;
分隔
以下是我正在使用的代码:
SKAction *pulseUp = [SKAction.scaleTo(3.0, duration: 3.0)]
SKAction *pulseDown = [SKAction.scaleTo(1.0, duration: 3.0)]
SKAction *pulse = [SKAction.sequence(pulseUp, pulseDown)]
SKAction *repeat = [SKAction repeatActionForever:pulse]]
[self.playButton runAction: repeat]
非常感谢任何帮助。
答案 0 :(得分:6)
在带有Swift的xCode版本8.3.3中,
let pulseUp = SKAction.scale(to: 3.0, duration: 1.0)
let pulseDown = SKAction.scale(to: 0.5, duration: 1.0)
let pulse = SKAction.sequence([pulseUp, pulseDown])
let repeatPulse = SKAction.repeatForever(pulse)
self.playButton.run(repeatPulse)
答案 1 :(得分:1)
它类似于以下内容:
SKAction *scaleUpAction = [SKAction ...]; // you need to find the CCScaleTo counterpart
SKAction *scaleDownAction = [SKAction ...];
SKAction *pulse = [SKAction sequence:@[scaleUpAction, scaleDownAction]];
[sprite runAction:[SKAction repeatActionForever:pulse]];
答案 2 :(得分:0)
扩展名:
import SpriteKit
extension SKSpriteNode {
private static let fillColor = UIColor(red: 0, green: 0.455, blue: 0.756, alpha: 0.45)
func addPulseEffect(circleOfRadius: CGFloat, backgroundColor: UIColor = fillColor) {
let circle = SKShapeNode(circleOfRadius: circleOfRadius)
circle.fillColor = backgroundColor
circle.lineWidth = 0.0
circle.position = CGPoint(x: 0, y: 0)
self.addChild(circle)
let scale = SKAction.scale(to: 3.0, duration: 1.0)
let fadeOut = SKAction.fadeOut(withDuration: 1.0)
let pulseGroup = SKAction.sequence([scale, fadeOut])
let repeatSequence = SKAction.repeatForever(pulseGroup)
circle.run(repeatSequence)
}
func repeatPulseEffectForEver(circleOfRadius: CGFloat) {
let _ = Timer.scheduledTimer(withTimeInterval: 0.8, repeats: true) { (timer) in
self.addPulseEffect(circleOfRadius: circleOfRadius)
}
}
}
答案 3 :(得分:0)
如果您想要真正的脉冲效果(即一旦放大,立即达到原始比例并永远重复,请执行以下操作:
func addPulseAction(scale: CGFloat = 50, duration: TimeInterval = 0.5) {
let pulse = = SKAction.sequence([
SKAction.group([
SKAction.scale(to: scale, duration: duration),
SKAction.fadeOut(withDuration: duration)
]),
SKAction.group([
SKAction.scale(to: 1, duration: 0),
SKAction.fadeIn(withDuration: 0)
])
])
let shockwave = SKShapeNode(circleOfRadius: 1)
node.addChild(shockwave)
shockwave.run(SKAction.repeatForever(pulse))
}