在swift中,我如何改变SKSpriteNode的颜色



我创建了一个带有黑色SKSpriteNode的游戏,当用户触摸屏幕时,我希望SKSpriteNode变为白色。我用谷歌搜索了所有我能搜索到的东西,尝试了很多不同的策略,但都没有运气。有人知道怎么做吗?

下面是我的场景代码:

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
}

可以在SKSpriteNode上使用color属性,例如:

sprite.color = .whiteColor()

请记住,如果你的SKSpriteNode有纹理,你需要将colorBlendFactor设置为非零值才能看到你的颜色。colorBlendFactor上的SKSpriteNode文档:

取值范围为0.0 ~ 1.0之间的数字。默认的值(0.0)表示忽略颜色属性,并且纹理的值应该不加修改地使用。用于大于

在绘制到场景之前,纹理与颜色混合。

如果你想动画的颜色变化,你可以使用SKAction:

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

来自colorizeWithColor:colorBlendFactor:duration:上的SKAction文档

此操作只能由SKSpriteNode对象执行。当动作执行时,精灵的color和colorBlendFactor属性

复制在其他论坛找到的答案:

你的图像的黑色部分不会被混合,我看不出你的图像的alpha是什么,但是如果你的图像只是一个黑色的轮廓和一个纯白色的中心,如果你混合,你会看到颜色。如果你只想让轮廓混合,你需要创建一个白色的轮廓。使用混合,您可以将颜色设置为混合为黑色,但不能混合为白色。

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

最新更新