Swift:背景颜色褪色动画(SpriteKit)

时间:2015-08-25 18:49:55

标签: ios swift background sprite-kit fade

我正在创建一个游戏,因此背景颜色为白色:

self.backgroundColor = SKColor.whiteColor()

所以当游戏发起白色时就是背景。我有一个评分系统,所以基本上我希望颜色在达到某个分数时改变:

if score < 100{
            enemy.runAction(SKAction.moveTo(mainBall.position, duration:3))  
        }
        else if score >= 100 && score < 200{
            enemy.runAction(SKAction.moveTo(mainBall.position, duration:2.5))
            self.backgroundColor = SKColor.purpleColor()
        }
        else if score >= 200 && score < 300{
            enemy.runAction(SKAction.moveTo(mainBall.position, duration:2))
            self.backgroundColor = SKColor.greenColor()
        }
然而,这种方法非常笨重,如果我诚实的话,看起来非常糟糕。我的游戏中的所有内容都是流畅的,并且在使用以下方式从场景中移除时包含淡出:

livesLabel.runAction(SKAction.fadeInWithDuration(0.5))

但我不确定如何使用背景颜色进行此操作。如果我将上面的例子与backgroundColor一起使用,例如

self.backgroundColor = SKAction.fadeInWithDuration(SKColor.purpleColor())

我收到错误“无法使用'(UIColor)'的参数列表调用'fadeInWithDuration'”

注意:我完全理解尝试将背景颜色分配给动画是愚蠢的。但我把那些代码放在那里试图解决我的问题

3 个答案:

答案 0 :(得分:3)

要从当前背景颜色平滑过渡到其他颜色,请使用colorizeWithColor SKAction。这是一个例子......

runAction(SKAction.colorizeWithColor(SKColor.purpleColor(), colorBlendFactor: 1.0, duration: 2.0))

答案 1 :(得分:2)

将此代码放入viewDidLoad方法中,看看它是否是您要找的内容

    self.view.backgroundColor = UIColor.blueColor()
    UIView.animateWithDuration(1.0, delay: 1.0, options: nil, animations: { () -> Void in
        self.view.backgroundColor = UIColor.greenColor()
    }, completion: nil)

如果您正在寻找这样的话,请执行

之类的操作
    if (score < 100){
        enemy.runAction(SKAction.moveTo(mainBall.position, duration:3))  
    }
    else if (score >= 100 && score < 200){
        enemy.runAction(SKAction.moveTo(mainBall.position, duration:2.5))
        UIView.animateWithDuration(0.5, animations: { () -> Void in
           self.backgroundColor = SKColor.purpleColor()
       })
    }
    else if (score >= 200 && score < 300){
        enemy.runAction(SKAction.moveTo(mainBall.position, duration:2))
         UIView.animateWithDuration(0.5, animations: { () -> Void in
           self.backgroundColor = SKColor.greenColor()
    })
    }`

答案 2 :(得分:0)

你必须将你的if语句添加到override func update(currentTime: NSTimeInterval)(每个帧调用此方法)。

另外,我建议您删除if语句之后的(),因为它们是多余的,与backgroundColor之前的self相同。