- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在使用 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)
}))
}
最佳答案
您可以通过创建自定义操作来使用 SKAction
为 SKLabelNode
着色。这是一个如何做到这一点的例子
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/
SKAction colorizeWithColor: 根据文档仅适用于 SKSpriteNode,那么我们如何处理 SKLabelNode? SKLabelNode 确实具有可以静态设置的color
我正在使用 SKLabelNode。我正在创建它并将它作为 child 添加到我的场景中并且它显示没有问题,但是当我尝试使用 colorizeWithColor() 方法更改它的颜色(不是 fontC
我的场景中有一个 sprite (healthbar),我希望在玩家被击中时为其着色。我可以使用 greenColor 和 blueColor 为 Sprite 着色。但是,redColor、brow
好吧,我有一个 Sprite ,当被什么东西击中时,它应该会闪烁白色,我正在使用这个 SKAction *changeColorAction = [SKAction colorizeWithColor
我是一名优秀的程序员,十分优秀!