根据文档,SKAction colorizeWithColor:只使用SKSpriteNode,那么我们如何处理SKLabelNode呢?SKLabelNode具有可以静态设置的color和colorBlendFactor属性。有什么方法可以用SKAction动画吗?
我目前的方法是使用SKView的实例方法textureFromNode将一个textureFromNode呈现为纹理,但只需从该atm中获取零纹理:-(
更新:你知道些什么。我想我发现了纹理渲染的问题。在SKScene的init方法中不可能对纹理进行redner,因为在这一点上self.view为零。所以我尝试了在didMoveToView和瞧,纹理渲染。无论如何,谢谢-)
发布于 2014-11-19 01:51:21
也许有人会发现这很有用。
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))
let finalGreen = fromColorComponents[1] + (toColorComponents[1] - fromColorComponents[1])*CGFloat(elapsedTime / CGFloat(withDuration))
let finalBlue = fromColorComponents[2] + (toColorComponents[2] - fromColorComponents[2])*CGFloat(elapsedTime / CGFloat(withDuration))
let finalAlpha = fromColorComponents[3] + (toColorComponents[3] - fromColorComponents[3])*CGFloat(elapsedTime / CGFloat(withDuration))
labelNode.fontColor = SKColor(red: finalRed, green: finalGreen, blue: finalBlue, alpha: finalAlpha)
}))
}您甚至可以检查本演示中使用的此函数的结果:https://www.youtube.com/watch?v=ZIz8Bn0-hUA&feature=youtu.be
我决定在这里写一个简短的很好的解决方案,但是如果您需要更多的细节,请查看这个问题:SKAction.colorizeWithColor makes SKLabelNode disappear
发布于 2014-10-05 02:43:39
SKLabelNode还有一个可以设置的fontColor属性。但是,它不响应colorizeWithColor方法。
但是,您仍然可以通过与另一个SKSpriteNode颜色同步来动态地更改文本的颜色。如果您在雪碧上调用colorizeWithColor,字体颜色会随之变化。这包括指定持续时间内的颜色转换。示例:
[_tileCountLabel runAction:[SKAction repeatActionForever:
[SKAction customActionWithDuration:COLOR_TRANSITION_SPEED actionBlock:^(SKNode *node, CGFloat elapsedTime) {
_tileCountLabel.fontColor = _tileLayer0.color;
}]]];此外,我尝试使用SKCropNode掩码来尝试通过父SKSpriteNode设置字体颜色。colorizeWithColor方法在SKSpriteNode上工作,但是字体严重损坏和粗壮。所以没什么用。
发布于 2014-03-03 12:41:05
如果要对SKLabelNode进行着色,可以尝试使用该标签作为掩码并对背景进行着色:
SKSpriteNode *background = [SKSpriteNode spriteNodeWithColor:[UIColor whiteColor] size:CGSizeMake(200.0, 200.0)];
SKAction *turnRed = [SKAction colorizeWithColor:[UIColor redColor] colorBlendFactor:1.0 duration:2.0];
SKCropNode *cropNode = [SKCropNode node];
cropNode.maskNode = [yourAwesomeLabel copy];
[cropNode addChild:background];
[background runAction:turnRed];
[self addChild:cropNode];https://stackoverflow.com/questions/19719367
复制相似问题