Как быстро изменить цвет 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/