I have created a game with an SKSpriteNode
that is black and when the user touches the screen I would like for the SKSpriteNode
to change to white. I have googled everything I can and attempted lots of different strategies with no luck. Does anyone know how to do this?
Here's the code for my scene:
var blackBird = SKSpriteNode()
override func didMoveToView(view: SKView) {
//Black Bird
var blackBirdTexture = SKTexture(imageNamed:"blackbird")
blackBirdTexture.filteringMode = SKTextureFilteringMode.Nearest
blackBird = SKSpriteNode(texture: blackBirdTexture)
blackBird.setScale(0.5)
blackBird.position = CGPoint(x: self.frame.size.width * 0.35, y:
self.frame.size.height * 0.6)
blackBird.physicsBody =
SKPhysicsBody(circleOfRadius:blackBird.size.height/2.0)
blackBird.physicsBody!.dynamic = true
blackBird.physicsBody!.allowsRotation = false
self.addChild(blackBird)
}
override func touchesBegan(touches: Set<NSObject, withEvent event: UIEvent) {
/* Called when a touch begins */
for touch: AnyObject in touches {
let location = touch.locationInNode(self)
blackBird.color = .whiteColor()
blackBird.colorBlendFactor = 1.0
}
You can use the color
property on SKSpriteNode
, for example:
sprite.color = .whiteColor()
Bear in mind, if your SKSpriteNode
has a texture you'll need to set the colorBlendFactor
to a non-zero value to see your color. From the SKSpriteNode
documentation on colorBlendFactor
:
The value must be a number between 0.0 and 1.0, inclusive. The default value (0.0) indicates the color property is ignored and that the texture’s values should be used unmodified. For values greater than 0.0, the texture is blended with the color before being drawn to the scene.
If you want to animate the color change you can use an SKAction
:
let colorize = SKAction.colorizeWithColor(.whiteColor(), colorBlendFactor: 1, duration: 5)
sprite.runAction(colorize)
From the SKAction
documentation on colorizeWithColor:colorBlendFactor:duration:
This action can only be executed by an SKSpriteNode object. When the action executes, the sprite’s color and colorBlendFactor properties are animated to their new values.