繁体   English   中英

在swift中如何更改SKSpriteNode的颜色?

[英]In swift how do I change the color of a 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设置为非零值以查看颜色。 SKSpriteNode文档colorBlendFactor

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


如果要为颜色更改设置动画,可以使用SKAction

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM