Swift : Background Color fading animation (SpriteKit)

末鹿安然 提交于 2020-01-21 09:42:06

问题


I'm creating a game, the background color is white to begin with hence:

self.backgroundColor = SKColor.whiteColor()

So when the game initiates white is the background. I have a scoring system, so essentially I want the colors to change when a certain score is reached hence:

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()
        }

however, this method is very clunky and looks pretty awful if I'm honest. Everything in my game is fluid and contains fades when being removed from the scene using:

livesLabel.runAction(SKAction.fadeInWithDuration(0.5))

But I am unsure as to how I would proceed to do this with the background color. If I use the above example with backgroundColor such as

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

I get the error "Cannot invoke 'fadeInWithDuration' with an argument list of type '(UIColor)'"

Note: I understand completely that attempting to assign the background color to an animation is silly. But I put that code in there to try get my problem across


回答1:


To smoothly transition from the current background color to a different color, use the colorizeWithColor SKAction. Here's an example...

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



回答2:


Put this code in your viewDidLoad method and see if it is what you are looking for

    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 this is what you are looking for do something like

    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()
    })
    }`



回答3:


You have to add your if statements to override func update(currentTime: NSTimeInterval) (this method gets called every frame).

Also, I'd suggest you remove the () after the if statement as they are redundant, the same goes with the self before backgroundColor.



来源:https://stackoverflow.com/questions/32211803/swift-background-color-fading-animation-spritekit

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!