SKAction.colorizeWithColor使SKLabelNode消失

Gue*_*Gen 2 ios sprite-kit skaction sklabelnode swift

我正在使用SKLabelNode.我正在创建它并将它作为一个孩子添加到我的场景中它显示没有问题,但当我尝试使用colorizeWithColor()方法更改它的颜色(而不是fontColor)时,标签淡出.

这是问题的界限:

myLabel.runAction(SKAction.colorizeWithColor(SKColor.blueColor(), colorBlendFactor: 1.0, duration: duration))
Run Code Online (Sandbox Code Playgroud)

完成此操作后,我在控制台上打印了myLabel.color属性,这是我得到的:

Optional(UIDeviceRGBColorSpace 0.99178 0.99178 1 0.00822043)
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,alpha值几乎为0,所以我猜这就是标签消失的原因,但我不明白为什么会发生这种情况.

提前致谢.

更新:好的,所以我发现实际上这是我的不好,我在询问前没有搜索过.以下是有关colorizeWithColor方法的文档:

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

那么也许任何人都知道一个好的工作来着色一直在更新的SKLabelNode?

!!!最后更新!!!

我能够找到一个解决方案,但0x141E提出了一个更好的解决方案,我使用并创建了下一个方法,当你需要从颜色A转换到颜色B时,它很有效.在0x141E建议的解决方案中你曾经回到fontColor,当你改变颜色时它会闪烁.在我的情况下,它改变了fontColor,而不是color属性,这导致一个非常好的过渡(当然不是很好).

再次感谢0x141E真的很好的方法!

这是我的解决方案:

当你调用参数withDuration = 0.5的方法时,这种特殊情况很有效.但是如果你需要其他时间,你可以使用发送的withDuration参数或乘数来玩,在我的代码中是5.即使当然应该是更好的解决方案,所以如果你找到请分享.为了我的需要,这个很棒.

首先是一个视频,以便您了解它的工作原理:https://www.youtube.com/watch?v = Zzz8Bn0-hUA&feature = youroutu.be

  func changeColorForLabelNode(labelNode: SKLabelNode, toColor: SKColor, withDuration: NSTimeInterval) {
    labelNode.runAction(SKAction.customActionWithDuration(withDuration, actionBlock: {
      node, elapsedTime in

      let label = node as SKLabelNode

      let toColorComponents = CGColorGetComponents(toColor.CGColor)
      let fromColorComponents = CGColorGetComponents(label.fontColor.CGColor)

      let finalRed = fromColorComponents[0] + (toColorComponents[0] - fromColorComponents[0])*CGFloat(elapsedTime / (CGFloat(withDuration)*5))
      let finalGreen = fromColorComponents[1] + (toColorComponents[1] - fromColorComponents[1])*CGFloat(elapsedTime / (CGFloat(withDuration)*5))
      let finalBlue = fromColorComponents[2] + (toColorComponents[2] - fromColorComponents[2])*CGFloat(elapsedTime / (CGFloat(withDuration)*5))
      let finalAlpha = fromColorComponents[3] + (toColorComponents[3] - fromColorComponents[3])*CGFloat(elapsedTime / (CGFloat(withDuration)*5))

      labelNode.fontColor = SKColor(red: finalRed, green: finalGreen, blue: finalBlue, alpha: finalAlpha)
    }))
  }
Run Code Online (Sandbox Code Playgroud)

0x1*_*41E 6

您可以在着色SKLabelNodeSKAction通过创建一个自定义操作.这是一个如何做到这一点的例子

myLabel.color = SKColor.blueColor()
myLabel.colorBlendFactor = 0.0

let duration:NSTimeInterval = 2.0
myLabel.runAction(SKAction.customActionWithDuration(duration, actionBlock: {
    node, elapsedTime in

    let label = node as SKLabelNode
    label.colorBlendFactor = elapsedTime / CGFloat(duration);
}))
Run Code Online (Sandbox Code Playgroud)