我正在使用 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)
}))
}
最佳答案
您可以通过创建自定义操作使用 SKLabelNode
为 SKAction
着色。这是一个如何做到这一点的例子
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/