在迅速如何更改SKSpriteNode的颜色?

我创build了一个SKSpriteNode为黑色的游戏,当用户触摸屏幕时,我希望SKSpriteNode变成白色。 我search了一切可能的东西,尝试了很多不同的策略,但都没有运气。 有谁知道如何做到这一点?

这里是我的场景的代码:

 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 } 

您可以使用SKSpriteNodecolor属性,例如:

 sprite.color = .whiteColor() 

请记住,如果您的SKSpriteNode具有纹理,则需要将colorBlendFactor设置为非零值以查看您的颜色。 从SKSpriteNode上的SKSpriteNode文档 :

该值必须是介于0.0和1.0之间的数字。 默认值(0.0)表示颜色属性被忽略,纹理的值应该被修改。 对于大于0.0的值,纹理在被绘制到场景之前与颜色混合。


如果你想animation改变颜色,你可以使用SKAction

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

colorizeWithColor:colorBlendFactor:duration:SKAction文档 colorizeWithColor:colorBlendFactor:duration:

此操作只能由SKSpriteNode对象执行。 当动作执行时,精灵的颜色和colorBlendFactor属性被设置为新的值。

复制在另一个论坛上find的答案:

图像中的黑色部分不会混合,我看不到图像中的alpha值,但是如果图像只是一个黑色的轮廓,并且有一个纯色的白色中心,如果混合,就会看到颜色。 如果你只想要轮廓混合,你需要创build一个白色的轮廓。 使用混合,您可以设置颜色混合成黑色,但是不能混合成白色。

链接: https : //www.reddit.com/r/swift/comments/30hr88/colorizing_a_skspritenode_doesnt_seems_to_work_as/