Как быстро изменить цвет SKSpriteNode?

Я создал игру с SKSpriteNode, которая является черной, и когда пользователь коснется экрана, я хотел бы, чтобы SKSpriteNode изменился на белый. Я имею googled все, что могу, и попытался много разных стратегий без везения. Кто-нибудь знает, как это сделать?

Здесь код для моей сцены:

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
}

Ответ 1

Вы можете использовать свойство color на SKSpriteNode, например:

sprite.color = .whiteColor()

Имейте в виду, что если ваш SKSpriteNode имеет текстуру, вам нужно будет установить colorBlendFactor на ненулевое значение, чтобы увидеть ваш цвет. Из SKSpriteNode документации в colorBlendFactor:

Значение должно быть числом от 0,0 до 1,0 включительно. По умолчанию Значение (0.0) указывает, что свойство цвета игнорируется и что значения текстур должны использоваться без изменений. Для значений, больших 0.0, текстура смешивается с цветом перед тем, как нарисоваться на сцене.


Если вы хотите оживить изменение цвета, вы можете использовать SKAction:

let colorize = SKAction.colorizeWithColor(.whiteColor(), colorBlendFactor: 1, duration: 5)
sprite.runAction(colorize)

В SKAction документации на colorizeWithColor:colorBlendFactor:duration:

Это действие может выполняться только объектом SKSpriteNode. Когда действие выполняется, цвет спрайтов и свойства colorBlendFactor анимированы к их новым значениям.

Ответ 2

Копирование ответа, найденного на другом форуме:

Черные части вашего изображения не будут смешиваться, я не вижу, что такое альфа от вашего изображения, но если ваш образ был просто черным контуром с сплошным белым центром, если вы смешиваете, вы будете см. цвет. Если вы хотите, чтобы только контур смешался, вам нужно создать белый контур. При смешивании вы можете установить цвет в черный, но вы не можете смешать его с белым.

ссылка: https://www.reddit.com/r/swift/comments/30hr88/colorizing_a_skspritenode_doesnt_seems_to_work_as/