gpt4 book ai didi

ios - SKAction.colorizeWithColor 使 SKLabelNode 消失

转载 作者:可可西里 更新时间:2023-11-01 00:24:20 25 4
gpt4 key购买 nike

我正在使用 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 方法的文档:

This action can only be executed by an SKSpriteNode object. When the action executes, the sprite’s color and colorBlendFactor properties are animated to their new values.

所以也许有人知道为始终更新的 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)
}))
}

最佳答案

您可以通过创建自定义操作来使用 SKActionSKLabelNode 着色。这是一个如何做到这一点的例子

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com