如何在SWIFT中使用SpriteKit脉冲精灵

时间:2014-10-12 01:49:02

标签: ios swift sprite-kit

我正在尝试"脉冲" 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]

非常感谢任何帮助。

4 个答案:

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