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

这是问题所在:

myLabel.runAction(SKAction.colorizeWithColor(SKColor.blueColor(), colorBlendFactor: 1.0, duration: duration))

完成此操作后,我将 myLabel.color 属性打印到控制台,这是我得到的:
Optional(UIDeviceRGBColorSpace 0.99178 0.99178 1 0.00822043)

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

提前致谢。

更新:
好的,所以我实际上发现了这一点,这是我在问之前没有搜索过的缺点。这是关于 colorizeWithColor 方法的文档:



因此,也许有人确实知道为始终更新的 SKLabelNode 着色的好方法?

!!!最后更新!!!

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

再次感谢 0x141E 非常好的方法!!!

这是我的解决方案:

当您调用参数 withDuration = 0.5 的方法时,这种特殊情况非常有效
但是,如果您需要其他时间,您可以使用发送的 withDuration 参数或乘数,在我的代码中为 5。
即使有当然应该有更好的解决方案,所以如果你发现请分享它。对于我的需要,这个效果非常好。

首先是一个视频,这样你就可以看到它是如何工作的:https://www.youtube.com/watch?v=ZIz8Bn0-hUA&feature=youtu.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)
    }))
  }

最佳答案

您可以通过创建自定义操作使用 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);
}))

关于ios - SKAction.colorizeWithColor 使 SKLabelNode 消失,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27004758/

10-11 00:32