【问题标题】:In swift how do I change the color of a SKSpriteNode?如何快速更改 SKSpriteNode 的颜色?
【发布时间】:2015-10-07 16:21:44
【问题描述】:

我用黑色的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
}

【问题讨论】:

    标签: ios xcode swift sprite-kit skspritenode


    【解决方案1】:

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

    sprite.color = .whiteColor()
    

    请记住,如果您的 SKSpriteNode 具有纹理,则需要将 colorBlendFactor 设置为非零值才能看到您的颜色。来自SKSpriteNode documentationcolorBlendFactor:

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


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

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

    来自SKAction documentationcolorizeWithColor:colorBlendFactor:duration:

    此动作只能由 SKSpriteNode 对象执行。当。。。的时候 动作执行,精灵的 color 和 colorBlendFactor 属性 被赋予新的价值。

    【讨论】:

    • 您好,感谢您的回复。我正在尝试您给我的第一个选项,如下所示: sprite.color = .whiteColor() sprite.colorBlendFactor = 1.0 这对我不起作用,我做错了吗?谢谢!
    • 究竟是什么不工作?你有任何错误吗?不是变色吗?你的精灵的纹理不是黑色的吗?
    • 对不起,没有错误,只是没有改变颜色。我的精灵是我上传的图像,目前是黑色的,我正在尝试将其更改为白色。我不确定这是否意味着它当前的纹理是黑色的?另外,我确实尝试了您给我的第二个选项,它确实通过图像慢慢变白然后变回黑色来起作用。我只需要图像保持白色。再次感谢!
    • 你认为你可以贴出相关代码-SKSpriteNode的创建;您要在哪里设置颜色以及使用哪种方法?
    • 我已将您的答案添加为对您问题的编辑 - 这才是它真正属于的地方(您也应该删除您的答案):) 关于您的问题 - blackbird 图像是黑色的吗?
    【解决方案2】:

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

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

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

    【讨论】:

    • 抱歉,刚刚编辑。引用是允许我解决与本主题中描述的相同问题的部分。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-20
    • 2020-10-27
    • 2016-01-15
    • 1970-01-01
    相关资源
    最近更新 更多