问题
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